public OgmoLevel(string xmlString) { var xml = new XmlDocument(); xml.LoadXml(xmlString); var root = xml.DocumentElement; width = int.Parse(root.GetAttribute("width")) / 16; height = int.Parse(root.GetAttribute("height")) / 16; var tilesString = root["Tiles"].InnerText; tilesString = Regex.Replace(tilesString, @"\r\n?|\n|,", ""); tiles = new int[tilesString.Length]; for (int i = 0; i < tilesString.Length; i++) { // flip map vertically var x = i % width; var y = height - (i / width) - 1; var index = y * width + x; tiles[index] = int.Parse(tilesString[i].ToString()); } var ents = root["Entities"].ChildNodes; entities = new OgmoEntity[ents.Count]; var usedIds = new bool[ents.Count]; for (int i = 0; i < ents.Count; i++) { var ent = ents[i]; var id = int.Parse(ent.Attributes["id"].Value); if (id < ents.Count) { usedIds[id] = true; } } for (int i = 0; i < ents.Count; i++) { var ent = ents[i]; var id = int.Parse(ent.Attributes["id"].Value); var x = int.Parse(ent.Attributes["x"].Value) / 16f; // flip vertically var y = height - int.Parse(ent.Attributes["y"].Value) / 16f; if (id >= ents.Count) { for (int j = 0; j < ents.Count; j++) { if (!usedIds[j]) { id = j; usedIds[j] = true; break; } } } entities[id] = new OgmoEntity(id, ent.Name, new Vector2(x, y)); foreach (XmlAttribute attr in ent.Attributes) { if (attr.Name != "id" && attr.Name != "y" && attr.Name != "y") { entities[id].data.Add(attr.Name, attr.Value); } } } }
public override OgmoLayer ReadJson(JsonReader reader, Type objectType, OgmoLayer existingValue, bool hasExistingValue, JsonSerializer serializer) { JObject obj = JObject.Load(reader); OgmoProject project = serializer.Context.Context as OgmoProject; OgmoLayerDefinition[] context = project.LayerDefinitions; if (context == null) { throw new Exception("You must pass the OgmoProject as a serializer context to deserialize this type."); } var eid = (string)obj["_eid"]; for (int i = 0; i < context.Length; i++) { if (context[i] == null) // Grid layers arent implemented, nor will they. { continue; } if (eid == context[i].ExportID) { // Found the matching definition. var def = context[i]; switch (def) { case OgmoTileLayerDefinition tile: OgmoTileLayer tileLayer = new OgmoTileLayer(); tileLayer.Target = tile; tileLayer.TileSet = (string)obj["tileset"]; tileLayer.ExportID = eid; // Todo: read the data array mode and map it to a 1d array always. var dat = obj["data"].Children().ToArray(); tileLayer.Data = new int[dat.Length]; for (int j = 0; j < dat.Length; j++) { tileLayer.Data[j] = (int)dat[j]; } tileLayer.CellSize = new Point((int)obj["gridCellWidth"], (int)obj["gridCellHeight"]); tileLayer.CellCount = new Point((int)obj["gridCellsX"], (int)obj["gridCellsY"]); return(tileLayer); case OgmoEntityLayerDefinition entity: OgmoEntityLayer entityLayer = new OgmoEntityLayer(); entityLayer.ExportID = eid; entityLayer.Target = entity; var valuelist = obj["entities"].Children().ToArray(); entityLayer.Entities = new OgmoEntity[valuelist.Length]; for (int x = 0; x < valuelist.Length; x++) { OgmoEntity ov = new OgmoEntity(); OgmoEntity result = (OgmoEntity)OgmoEntityConverter.Instance.ReadJson(valuelist[x].CreateReader(), typeof(OgmoEntity), ov, serializer); entityLayer.Entities[x] = result; } return(entityLayer); } } } return(null); }
private void LoadEntity(OgmoEntity entity) { var go = GetPrefab (entity.name); if (go != null) { go = (GameObject)GameObject.Instantiate (go); go.transform.parent = lvl.transform; OTObject ot = go.GetComponent<OTObject> (); Vector3 pos = new Vector3 (((float)entity.x) / 16f, 0.25f, 15f - ((float)entity.y) / 16f); var size = GetEntitySize (entity.name) * 0.5f; pos.x += size.x * 0.5f; pos.z -= size.y * 0.5f; go.transform.localPosition = pos; if (ot != null) { ot.position = new Vector2 (go.transform.localPosition.x, go.transform.localPosition.z); ot.depth = -1; } } }