1 package net.systemeD.halcyon.mapfeatures {
3 import flash.events.EventDispatcher;
4 import flash.events.Event;
5 import flash.net.URLLoader;
6 import flash.net.URLRequest;
8 import flash.system.Security;
11 import net.systemeD.halcyon.connection.*;
14 public class MapFeatures extends EventDispatcher {
15 private static var instance:MapFeatures;
17 public static function getInstance():MapFeatures {
18 if ( instance == null ) {
19 instance = new MapFeatures();
20 instance.loadFeatures();
27 private var xml:XML = null;
28 private var _features:Array = null;
29 private var _categories:Array = null;
31 protected function loadFeatures():void {
32 var request:URLRequest = new URLRequest("map_features.xml");
33 var loader:URLLoader = new URLLoader();
34 loader.addEventListener(Event.COMPLETE, onFeatureLoad);
38 private function onFeatureLoad(event:Event):void {
39 xml = new XML(URLLoader(event.target).data);
41 _features = new Array();
42 for each(var feature:XML in xml.feature) {
43 _features.push(new Feature(feature));
45 _categories = new Array();
46 for each(var catXML:XML in xml.category) {
47 if ( catXML.child("category").length() == 0 )
48 _categories.push(new Category(this, catXML.@name, catXML.@id));
50 dispatchEvent(new Event("featuresLoaded"));
53 public function hasLoaded():Boolean {
57 public function findMatchingFeature(entity:Entity):Feature {
61 for each(var feature:Feature in features) {
62 // check for matching tags
63 var match:Boolean = true;
64 for each(var tag:Object in feature.tags) {
65 var entityTag:String = entity.getTag(tag.k);
66 match = entityTag == tag.v || (entityTag != null && tag.v == "*");
75 [Bindable(event="featuresLoaded")]
76 public function get categories():Array {
82 [Bindable(event="featuresLoaded")]
83 public function get features():Array {