Skip to content

Instantly share code, notes, and snippets.

@zachwlewis
Created September 14, 2010 02:49
Show Gist options
  • Save zachwlewis/578444 to your computer and use it in GitHub Desktop.
Save zachwlewis/578444 to your computer and use it in GitHub Desktop.
IsometricIO.as: Provides support for reading from and writing to XML objects for the IsometricGrid library.
package net.thegamestudio
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.ByteArray;
/**
* Provides support for reading from and writing to XML objects for the IsometericGrid library.
* @author Zachary Weston Lewis
*/
public class IsometericIO extends EventDispatcher
{
public var _xmlData:XML;
private var fs:FileReference;
public function IsometericIO()
{
fs = new FileReference();
}
/**
* Writes an IsometericLevel to an XML object, ready for writing to disk.
* @param level The IsometericLevel to create an XML object for.
* @return The XML object describing an IsometericLevel.
*/
public function WriteToXML(level:IsometericLevel):XML
{
var data:XML, tiles:XML, item:XML;
var count:uint = 0, i:uint, j:uint, k:uint;
data = <IsometericLevel>
</IsometericLevel>;
// Let's write our world dimensions out for help creating new worlds.
item = <Dimensions />;
item.@x = level.Width;
item.@y = level.Length;
item.@z = level.Height;
data.appendChild(item);
// Create a new child to hold our tiles.
tiles = <Tiles>
</Tiles>;
// Alright, now let's loop through our grid and write out our tiles.
for (i = 0; i < level.Width; i++)
{
for (j = 0; j < level.Length; j++)
{
for (k = 0; k < level.Height; k++)
{
// We only want tiles that are solid. No sense saving empty air.
if (level.getTile(i, j, k) > 0)
{
item = <Tile />;
item.@x = i;
item.@y = j;
item.@z = k;
item.@value = level.getTile(i, j, k);
tiles.appendChild(item);
}
}
}
}
// Add our tiles to our main XML.
data.appendChild(tiles);
return data;
}
public function SaveXMLToFile(XMLData:XML):void
{
fs.save(XMLData,"newmap.tmf");
}
public function OpenXMLFromFile():void
{
fs.addEventListener(Event.SELECT, LoadXMLData);
fs.browse([new FileFilter("Tactics Map Files", "*.tmf"), new FileFilter("All Files", "*.*")]);
}
private function LoadXMLData(e:Event):void
{
fs.addEventListener(Event.COMPLETE, loadXML);
fs.load();
fs.removeEventListener(Event.SELECT, LoadXMLData);
}
private function loadXML(e:Event):void
{
fs.removeEventListener(Event.COMPLETE, loadXML);
try
{
var ba:ByteArray = fs.data;
var s:String = ba.readUTFBytes( ba.length );
var xml:XML = new XML( s );
_xmlData = xml;
dispatchEvent(new Event(Event.COMPLETE));
}
catch (e:Error) { trace(e); }
}
private function completeHandler(e:Event):void
{
_xmlData = new XML(e.target.data);
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment