///////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2010-2011 Wolfgang Kowarschick // // Dieses Werk darf unter den Bedingungen der Creative Common Lizenz by-nc 3.0 de // (http://creativecommons.org/licenses/by-nc/3.0/de/) // vervielfaeltigt, verbreitet, publiziert und modifiziert werden. ///////////////////////////////////////////////////////////////////////////////// package as3.component.board.view { import as3.assert.Assert; import as3.component.board.data.EventDataBoard; import as3.component.board.data.EventDataTile; import as3.component.board.data.I_DataBoardView; import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; /** * @autor Wolfgang Kowarschick * @category class * @langversion 3.0 */ public class ViewBoardDisplayObjects extends Sprite implements I_ViewBoard { ///////////////////////////////////////////////////////////////////////////// // LDVCS ///////////////////////////////////////////////////////////////////////////// private var v_tile_width: uint; public function set tileWidth(p_tile_width: uint): void { if (v_tile_width != p_tile_width) { Assert.isTrue(v_tile_width == 0, this, "tileWidth has already been initialized"); Assert.isTrue(p_tile_width > 0, this, "tileWidth must be greater zero"); v_tile_width = p_tile_width; }; } private var v_tile_height: uint; public function set tileHeight(p_tile_height: uint): void { if (v_tile_height != p_tile_height) { Assert.isTrue(v_tile_height == 0, this, "tileHeight has already been initialized"); Assert.isTrue(p_tile_height > 0, this, "tileHeight must be greater zero"); v_tile_height = p_tile_height; }; } private var v_data: I_DataBoardView; public function set data(p_data: I_DataBoardView): void { if (v_data != p_data) { Assert.equals(v_data, null, this, "data has already been initialized"); Assert.notEquals(p_data, null, this, "data cannot be set to null"); v_data = p_data; v_data.addEventListener(Event.CLEAR, o_clear); v_data.addEventListener(Event.CHANGE, o_tile); }; } private var v_extent: I_ExtentViewTile; public function set extent(p_extent: I_ExtentViewTile): void { if (v_extent != p_extent) { Assert.equals(v_extent, null, this, "extent has already been initialized"); Assert.notEquals(p_extent, null, this, "extent cannot be set to null"); v_extent = p_extent; }; } ///////////////////////////////////////////////////////////////////////////// // Constuctor ///////////////////////////////////////////////////////////////////////////// public function ViewBoardDisplayObjects (p_tile_width: uint = 0, p_tile_height: uint = 0, p_data: I_DataBoardView = null, p_extent_class: Class = null, p_extent: I_ExtentViewTile = null ) { this.data = p_data; this.extent = p_extent_class != null ? new ExtentViewTile(p_extent_class) : p_extent; this.tileWidth = p_tile_width; this.tileHeight = p_tile_height; } ///////////////////////////////////////////////////////////////////////////// // Instance variables ///////////////////////////////////////////////////////////////////////////// private var v_size_x: uint = 0; private var v_size_y: uint = 0; private var v_board: Sprite; private var v_tiles: Vector.>; ///////////////////////////////////////////////////////////////////////////// // Observers ///////////////////////////////////////////////////////////////////////////// private function o_clear(p_event: EventDataBoard): void { if (v_board != null) removeChild(v_board); v_board = new Sprite(); this.addChild(v_board); v_size_x = p_event.sizeX; v_size_y = p_event.sizeY; if (v_size_x>0 && v_size_y>0) { v_tiles = new Vector.>(v_size_y, true); for (var i: int = 0; i < p_event.sizeY; i++) v_tiles[i] = new Vector.(v_size_x, true); }; } private function o_tile(p_event: EventDataTile): void { if (v_board != null) { Assert.isTrue(p_event.x < v_size_x, this, p_event.x + " > " + v_size_x + " (witdh of the board)" ); Assert.isTrue(p_event.y < v_size_y, this, p_event.y + " > " + v_size_y + " (height of the board)" ); if (v_tiles[p_event.y][p_event.x] != null) v_board.removeChild(v_tiles[p_event.y][p_event.x]); var l_display_object_class: Class = v_extent.get(p_event.tile).tileClass; if (l_display_object_class != null) { var l_display_object: DisplayObject = new l_display_object_class(); var l_tile_width: uint = v_tile_width == 0 ? l_display_object.width : v_tile_width; var l_tile_height: uint = v_tile_height == 0 ? l_display_object.height : v_tile_height; l_display_object.x = p_event.x * l_tile_width; l_display_object.y = p_event.y * l_tile_height; l_display_object.width = l_tile_width; l_display_object.height = l_tile_height; v_board.addChild(l_display_object); v_tiles[p_event.y][p_event.x] = l_display_object; }; }; } ///////////////////////////////////////////////////////////////////////////// // Public methods ///////////////////////////////////////////////////////////////////////////// /** Workaround for missing interface ISprite. */ public function asSprite(): Sprite { return this; } ///////////////////////////////////////////////////////////////////////////// // End of class ///////////////////////////////////////////////////////////////////////////// } } ///////////////////////////////////////////////////////////////////////////////// // End of file /////////////////////////////////////////////////////////////////////////////////