package hud { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.DropShadowFilter; import flash.filters.GlowFilter; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFormatAlign; import flash.text.TextFieldAutoSize; import com.senocular.display.EasyButton; import world.items.*; public class HudPanel extends Sprite { private var chipCount:int = 0; private var chipCountMax:int = -1; private var sheepCount:int = 0; private var sheepCountMax:int = -1; private var chipLabel:TextField; private var chipLabelMax:TextField; private var sheepLabel:TextField; private var sheepLabelMax:TextField; private var timeLabel:TextField; public function HudPanel() { var chipIcon:Sprite = createIcon(new ChupaovejaDweller()); chipIcon.x = 50; chipIcon.y = 25; var chipText:Sprite = createCountLabel(); chipLabel = chipText.getChildAt(0) as TextField; chipLabelMax = chipText.getChildAt(1) as TextField; chipText.x = 63; chipText.y = 4; var sheepIcon:Sprite = createIcon(new SheepDweller()); sheepIcon.x = 175; sheepIcon.y = 25; var sheepText:Sprite = createCountLabel(); sheepLabel = sheepText.getChildAt(0) as TextField; sheepLabelMax = sheepText.getChildAt(1) as TextField; sheepText.x = 188; sheepText.y = 4; var timeText:Sprite = createLabel(); timeLabel = timeText.getChildAt(0) as TextField; timeText.x = 285; timeText.y = 6; var resetButton:EasyButton = new EasyButton("Generate"); resetButton.x = 285; resetButton.y = 30; addChild(chipIcon); addChild(sheepIcon); addChild(chipText); addChild(sheepText); addChild(timeText); addChild(resetButton); setCount("chip", 0); setCount("sheep", 0); setTime(0); drawBackground(); addEventListener(MouseEvent.MOUSE_DOWN, block); resetButton.addEventListener(MouseEvent.CLICK, init); init(); } public function setCount(name:String, value:int):void { switch (name) { case "chip": chipCount = value; chipLabel.text = String(chipCount); if (chipCount > chipCountMax) { chipCountMax = chipCount; chipLabelMax.text = "max: "+chipCountMax; } break; case "sheep": sheepCount = value; sheepLabel.text = String(sheepCount); if (sheepCount > sheepCountMax) { sheepCountMax = sheepCount; sheepLabelMax.text = "max: "+sheepCountMax; } break; } } public function setTime(value:int):void { timeLabel.text = "Time: "+ formatTime(value); } public function resetCount():void { chipCountMax = -1; sheepCountMax = -1; setCount("chip", 0); setCount("sheep", 0); } // event handlers private function init(evt:Event = null):void { dispatchEvent(new Event(Event.INIT)); if (evt) { evt.stopPropagation(); } } private function block(evt:Event):void { evt.stopPropagation(); } // formatters/creation methods private function formatTime(value:int):String { var seconds:Number = Math.floor(value/1000); var minutes:Number = Math.floor(seconds/60); seconds %= 60; var secs:String = (seconds < 10) ? "0" + seconds : String(seconds); var mins:String = String(minutes); return mins + ":" + secs; } private function applyStyle(target:Graphics):void { target.lineStyle(4, 0xBBCCAA); target.beginFill(0xDDEECC, .8); } private function drawBackground():void { applyStyle(graphics); graphics.drawRoundRect(0,0, 400,400, 100,100); } private function createIcon(dweller:Dweller):Sprite { var size:Number = 60; var offset:Number = 10; dweller.angle = Math.PI/4; dweller.step(); dweller.display.filters = [new GlowFilter(0, 1, 6, 6, 10)]; var frame:Sprite = new Sprite(); frame.addChild(dweller.display); var factorX:Number = (size - offset)/(dweller.display.width); var factorY:Number = (size - offset)/(dweller.display.height); dweller.display.scaleX = Math.min(factorX, factorY); dweller.display.scaleY = dweller.display.scaleX; var bounds:Rectangle = dweller.display.getBounds(frame); dweller.display.x += size/2 - (bounds.left + bounds.width/2); dweller.display.y += size/2 - (bounds.top + bounds.height/2); var data:BitmapData = new BitmapData(size, size, true, 0); data.draw(frame); var icon:Sprite = new Sprite(); applyStyle(icon.graphics); icon.graphics.drawCircle(0, 0, size/2); var image:Bitmap = new Bitmap(data); image.x = -image.width/2; image.y = -image.height/2; icon.addChild(image); return icon; } private function createLabel():Sprite { var container:Sprite = new Sprite(); var format:TextFormat; var label_txt:TextField = new TextField(); label_txt.autoSize = TextFieldAutoSize.LEFT; label_txt.selectable = false; label_txt.textColor = 0x556644; format = label_txt.getTextFormat(); format.font = "_sans"; format.size = 12; label_txt.defaultTextFormat = format; container.addChild(label_txt); return container; } private function createCountLabel():Sprite { var container:Sprite = new Sprite(); var format:TextFormat; var label_txt:TextField = new TextField(); label_txt.autoSize = TextFieldAutoSize.CENTER; label_txt.selectable = false; label_txt.textColor = 0x556644; format = label_txt.getTextFormat(); format.font = "_sans"; format.align = TextFormatAlign.CENTER; format.size = 32; label_txt.defaultTextFormat = format; var labelMax_txt:TextField = new TextField(); labelMax_txt.autoSize = TextFieldAutoSize.CENTER; labelMax_txt.selectable = false; labelMax_txt.textColor = 0x889977; labelMax_txt.y = 30; format = labelMax_txt.getTextFormat(); format.font = "_sans"; format.align = TextFormatAlign.CENTER; format.size = 12; labelMax_txt.defaultTextFormat = format; container.addChild(label_txt); container.addChild(labelMax_txt); return container; } } }