// Use this for initialization void Start() { string mapPath = "polynew"; Debug.Log ("TileMapTest : Start"); // TDMap map = new TDMap(mapPath); TextAsset dataAsset = (TextAsset)Resources.Load (mapPath, typeof(TextAsset)); if (!dataAsset) Debug.Log ("TileMapTest: Couldn't load the map data from: " + mapPath); Dictionary<string, object> dict = dataAsset.text.dictionaryFromJson (); int count = dict.Count; Debug.Log ("Item count = " + dict.Count); if (count > 0) { // Map Metadata int mapWidth = GetInteger (dict, "width"); int mapHeight = GetInteger (dict, "height"); int tileSize = GetInteger (dict, "tilewidth"); // 1st tileset List<object> tilesets = GetList (dict, "tilesets"); Dictionary<string, object> tileset = null; string elementPath = ""; int tileIdStart = 0; // string elementPath = tileset["image"].ToString(); // string [] pathSplit = elementPath.Split(new Char [] {'/'}); // _tilesetElementName = pathSplit[pathSplit.Length-1]; if (tilesets.Count > 0) { tileset = (Dictionary<string, object>)tilesets [0]; elementPath = GetString (tileset, "image"); tileIdStart = GetInteger (tileset, "firstgid"); } List<object> layers = GetList (dict, "layers"); // Load Layers TDMapLayer[] tdMapLayers = new TDMapLayer[layers.Count]; for (int i=0; i < layers.Count; i++) { Dictionary<string, object> ld = (Dictionary<string, object>)layers [i]; int layerWidth = GetInteger (ld, "width"); int layerHeight = GetInteger (ld, "height"); int xOffset = GetInteger (ld, "x"); int yOffset = GetInteger (ld, "y"); TDMapLayer newLayer = new TDMapLayer (layerWidth, layerHeight, xOffset, yOffset, tileSize); tdMapLayers [i] = newLayer; string layerName = GetString (ld, "name"); if (layerName.Equals ("Object")) { List<object> layerObjects = GetList (ld, "objects"); // LoadMapObjects (objectList); } else { List<object> layerData = GetList (ld, "data"); if (layerData != null && layerData.Count > 0) { string [] pathSplit = elementPath.Split (new System.Char [] {'/'}); string _tilesetElementName = pathSplit [pathSplit.Length - 1]; newLayer.LoadTiles (layerData.ToArray(), tileIdStart, _tilesetElementName); } } /* _allLayersByName.Add (layerHash["name"].ToString(), newLayer); AddChild(newLayer); */ } Debug.Log ("layer count = " + tdMapLayers.Length); Debug.Log ("mapWidth: " + mapWidth); Debug.Log ("mapHeight: " + mapHeight); Debug.Log ("tileSize: " + tileSize); Debug.Log ("tileIdStart: " + tileIdStart); Debug.Log ("elementPath: " + elementPath); } }
public TDMap(string mapPath) { TextAsset dataAsset = (TextAsset) Resources.Load (mapPath, typeof(TextAsset)); if(!dataAsset) Debug.Log ("TDMap: Couldn't load the map data from: " + mapPath); Dictionary<string, object> dict = dataAsset.text.dictionaryFromJson(); Hashtable hash = new Hashtable(dict);//dataAsset.text.hashtableFromJson(); // Map Metadata _mapWidth = int.Parse(hash["width"].ToString()); _mapHeight = int.Parse(hash["height"].ToString()); _tileSize = int.Parse(hash["tilewidth"].ToString()); Debug.Log(hash["tilesets"].GetType().ToString()); ArrayList tilesetsList = (ArrayList)hash["tilesets"]; Hashtable tileset = (Hashtable)tilesetsList[0]; string elementPath = tileset["image"].ToString(); string [] pathSplit = elementPath.Split(new Char [] {'/'}); _tilesetElementName = pathSplit[pathSplit.Length-1]; _tileIdStart = int.Parse (tileset["firstgid"].ToString()); Debug.Log ("mapWidth: "+_mapWidth); Debug.Log ("mapHeight: "+_mapHeight); Debug.Log ("tileSize: "+_tileSize); Debug.Log ("tileIdStart: "+_tileIdStart); Debug.Log ("tilesetElementName: "+_tilesetElementName); // Load Layers ArrayList layersList = (ArrayList)hash["layers"]; _layers = new TDMapLayer[layersList.Count]; for (int i=0; i < layersList.Count; i++) { Hashtable layerHash = (Hashtable)layersList[i]; int layerWidth = int.Parse (layerHash["width"].ToString()); int layerHeight = int.Parse (layerHash["height"].ToString()); int xOffset = int.Parse (layerHash["x"].ToString()); int yOffset = int.Parse (layerHash["y"].ToString()); TDMapLayer newLayer = new TDMapLayer (layerWidth, layerHeight, xOffset, yOffset, _tileSize); _layers[i] = newLayer; if (layerHash["name"].ToString().Equals("Objects")) { // Load object data if it exists... ArrayList objectList = (ArrayList)layerHash["objects"]; LoadMapObjects (objectList); } else { // Load tile data if it exists... if (layerHash["data"] != null) { ArrayList layerData = (ArrayList)layerHash["data"]; newLayer.LoadTiles (layerData.ToArray(), _tileIdStart, _tilesetElementName); } _allLayersByName.Add (layerHash["name"].ToString(), newLayer); AddChild(newLayer); } } _floorLayer = LayerWithName("Floor"); }