///////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2010 Wolfgang Kowarschick // // Permission is granted to copy, distribute and/or modify this document // under the terms of the WK License, Version 1.0 (WKL 1.0) or any later // version published by Wolfgang Kowarschick. ///////////////////////////////////////////////////////////////////////////////// package as3.component.board.service { import as3.assert.Assert; import as3.component.board.data.I_DataBoard; import as3.component.level.data.I_DataLevel; import as3.component.level.service.I_ServiceLevel; import as3.component.level.service.ServiceLevel; import as3.enumeration.ExtentEnum; import as3.enumeration.I_Enum; import as3.enumeration.I_ExtentEnum; import as3.xml.data.I_DataXML; import as3.xml.service.I_ServiceXML; import as3.xml.service.ServiceXML; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; public class ServiceBoard implements I_ServiceBoard, I_DataXML { ///////////////////////////////////////////////////////////////////////////// // LDVCS ///////////////////////////////////////////////////////////////////////////// private var v_data_board: I_DataBoard; public function set dataBoard(p_data: I_DataBoard): void { if (v_data_board != p_data) { Assert.equals(v_data_board, null, this, "dataBoard has already been initialized"); Assert.notEquals(p_data, null, this, "dataBoard cannot be set to null"); v_data_board = p_data; }; } private var v_service_level: I_ServiceLevel = new ServiceLevel(); public function set dataLevel(p_data: I_DataLevel): void { v_service_level.dataLevel = p_data; } private var v_extent: I_ExtentEnum; public function set extent(p_extent: I_ExtentEnum): 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; }; } ///////////////////////////////////////////////////////////////////////////// // Instance variables ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Constructor ///////////////////////////////////////////////////////////////////////////// public function ServiceBoard(p_data_board: I_DataBoard = null, p_data_level: I_DataLevel = null, p_extent_class: Class = null, p_extent: I_ExtentEnum = null ) { this.dataBoard = p_data_board; this.dataLevel = p_data_level; this.extent = p_extent_class != null ? new ExtentEnum(p_extent_class) : p_extent; v_service_level.dataXML = this; } ///////////////////////////////////////////////////////////////////////////// // Methods ///////////////////////////////////////////////////////////////////////////// public function load(p_url: String = null): void { v_service_level.load(p_url); } /** * Initializes the board. The top element of the XML object must contain * two attributes sizeX and sizeY. *

* The top level element may be abitrarily named and have further attribues. *

* The top level element may (amongst other uninterpreted elements) * contain to kinds of elements: *

* *

Example

*
     *
     *  
     *  
     *  
     *  
     *  
     *
     *
*/ public function set xml(p_xml: XML): void { v_data_board.setSize(parseInt(p_xml.@sizeX), parseInt(p_xml.@sizeY)); for each (var l_xml: XML in p_xml.*) { if (l_xml.localName() == "tile") v_data_board.settile (parseInt(l_xml.@x), parseInt(l_xml.@x), v_extent.get(l_xml.@type.toString()) ); else if(l_xml.localName() == "line") { var l_start_x: int = parseInt(l_xml.@startX); var l_start_y: int = parseInt(l_xml.@startY); var l_end_x: int = parseInt(l_xml.@endX); var l_end_y: int = parseInt(l_xml.@endY); var l_delta_x: int = l_end_x - l_start_x; var l_delta_y: int = l_end_y - l_start_y; var l_steps: int = Math.max(Math.abs(l_delta_x), Math.abs(l_delta_y)); var l_type: I_Enum = v_extent.get(l_xml.@type.toString()); for (var i: int = 0; i <= l_steps; i++) v_data_board.settile ( l_start_x + i*l_delta_x/l_steps, l_start_y + i*l_delta_y/l_steps, l_type ); }; } }; ///////////////////////////////////////////////////////////////////////////// // End of class ///////////////////////////////////////////////////////////////////////////// } } ///////////////////////////////////////////////////////////////////////////////// // End of file /////////////////////////////////////////////////////////////////////////////////