package { import flash.display.Bitmap; public class OfficeDoorView extends TileView { private var firstDraw:Boolean = true; private var open:Boolean; private var openBitmap:Bitmap, closedBitmap:Bitmap; private var openPosition:Vector2, closedPosition:Vector2; private var owningView:OfficeDoorFrameView; public function OfficeDoorView(owningView:OfficeDoorFrameView, model:OfficeDoorFrameModel, layerIndex:int = 0) { var closedOffset:Vector2, openOffset:Vector2, openScreenOffset:Vector2; super(model, layerIndex); this.owningView = owningView; open = false; switch (TileModel(model).tileType) { case TileModel.TILE_DoorFrameE: closedBitmap = new (Embeds.embedOfficeDoorClosedE)(); openBitmap = new (Embeds.embedOfficeDoorOpenE)(); closedOffset = new Vector2(0.01, 0); openOffset = new Vector2(0, 0.99); openScreenOffset = new Vector2(0, 0); break; case TileModel.TILE_DoorFrameN: closedBitmap = new (Embeds.embedOfficeDoorClosedN)(); closedBitmap.x = -closedBitmap.width / 2; openBitmap = new (Embeds.embedOfficeDoorOpenN)(); closedOffset = new Vector2(0, 0.01); openOffset = new Vector2(0.99, 0); openScreenOffset = new Vector2(0, 0); break; case TileModel.TILE_DoorFrameS: closedBitmap = new (Embeds.embedOfficeDoorClosedS)(); closedBitmap.x = -closedBitmap.width / 2; openBitmap = new (Embeds.embedOfficeDoorOpenS)(); closedOffset = new Vector2(0, 0.01); openOffset = new Vector2(-0.99, 0); openScreenOffset = new Vector2(0, 0); break; case TileModel.TILE_DoorFrameW: closedBitmap = new (Embeds.embedOfficeDoorClosedW)(); closedBitmap.x = -closedBitmap.width / 2; openBitmap = new (Embeds.embedOfficeDoorOpenW)(); closedOffset = new Vector2(0.01, 0); openOffset = new Vector2(0.99, -0.98); openScreenOffset = new Vector2(24, 12); break; } closedPosition = model.position.add(closedOffset); openPosition = model.position.add(openOffset); openBitmap.x = -openBitmap.width / 2 + openScreenOffset.x; openBitmap.y = openScreenOffset.y; closedBitmap.x = -closedBitmap.width / 2; addChild(closedBitmap); } override public function get position():Vector2 { return open ? openPosition : closedPosition; } override public function draw(delta:Number):void { if (firstDraw) { openBitmap.x += owningView.x; openBitmap.y += owningView.y; closedBitmap.x += owningView.x; closedBitmap.y += owningView.y; firstDraw = false; } if (OfficeDoorFrameModel(model).open && !open) { removeChild(closedBitmap); addChild(openBitmap); open = true; } else if (!OfficeDoorFrameModel(model).open && open) { removeChild(openBitmap); addChild(closedBitmap); open = false; } } } }