/////////////////////////////////////////////////////////////////////////////////
// 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
/////////////////////////////////////////////////////////////////////////////////