static CCTMXLayer ParseLayer(XmlNode nodeData, int cols, int rows, Dictionary<int, string> gidToFiles, Dictionary<int, Dictionary<string, string>> gidToTileProperties){
XmlNode data = nodeData.SelectSingleNode("data");
string name = nodeData.Attributes["name"].InnerText;
string encoding = data.Attributes["encoding"].InnerText;
NSUtils.Assert (encoding=="csv", "cocos2d:CCTMXMapParser: Unsupported encoding {0} found. Only csv is supported now.", encoding);
string csvData = data.InnerText;
CCTMXTiledLayer layer = new CCTMXTiledLayer();
layer.name = name;
layer.visiable = nodeData.Attributes["visible"] != null && nodeData.Attributes["visible"].InnerText == "0";
layer.tiles = new CCTMXTile[rows][];
for (int row=0; row<rows; row++) {
layer.tiles[row] = new CCTMXTile[cols];
}
string[] layerData = csvData.Split(',');
int totalTiles = cols * rows;
for (int i = 0; i < totalTiles; i++) {
int col = i % cols;
int row = Mathf.FloorToInt(i / cols);
int tileId = int.Parse(layerData[i].ToString().Trim());
if(tileId>0){
CCTMXTile tile = new CCTMXTile();
tile.gid = tileId;
tile.col = col;
tile.row = row;
try{
tile.file = gidToFiles[tile.gid];
}catch{
throw new UnityEngine.UnityException(string.Format("cocos2d: CCTMXMapParser: gid [{0}] not found", tile.gid));
}
Dictionary<string, string> tileProperties = null;
if(!gidToTileProperties.TryGetValue(tile.gid, out tileProperties)){
tileProperties = null;
}
tile.sharedProperties = tileProperties;
layer.tiles[row][col] = tile;
}
}
XmlNode propertiesNode = nodeData.SelectSingleNode("properties");
if(propertiesNode!=null){
layer.properties = new Dictionary<string, string>();
ParseProperties(propertiesNode, layer.properties);
}
return layer;
}