public static TmxObjectGroup FromXml(XElement xml, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(); // Order within Xml file is import for layer types tmxObjectGroup.XmlElementIndex = xml.NodesBeforeSelf().Count(); tmxObjectGroup.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObjectGroup.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); tmxObjectGroup.Properties = TmxProperties.FromXml(xml); PointF offset = new PointF(0, 0); offset.X = TmxHelper.GetAttributeAsFloat(xml, "offsetx", 0); offset.Y = TmxHelper.GetAttributeAsFloat(xml, "offsety", 0); tmxObjectGroup.Offset = offset; // Get all the objects Logger.WriteLine("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxObjectGroup, tmxMap); tmxObjectGroup.Objects = objects.ToList(); // Are we using a unity:layer override? tmxObjectGroup.UnityLayerOverrideName = tmxObjectGroup.Properties.GetPropertyValueAsString("unity:layer", ""); return tmxObjectGroup; }
public static TmxObjectGroup FromXml(XElement xml, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(); // Order within Xml file is import for layer types tmxObjectGroup.XmlElementIndex = xml.NodesBeforeSelf().Count(); tmxObjectGroup.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObjectGroup.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); tmxObjectGroup.Properties = TmxProperties.FromXml(xml); PointF offset = new PointF(0, 0); offset.X = TmxHelper.GetAttributeAsFloat(xml, "offsetx", 0); offset.Y = TmxHelper.GetAttributeAsFloat(xml, "offsety", 0); tmxObjectGroup.Offset = offset; // Get all the objects Program.WriteLine("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxObjectGroup, tmxMap); tmxObjectGroup.Objects = objects.ToList(); // Are we using a unity:layer override? tmxObjectGroup.UnityLayerOverrideName = tmxObjectGroup.Properties.GetPropertyValueAsString("unity:layer", ""); return(tmxObjectGroup); }
public static TmxObjectGroup FromXml(XElement xml, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(); tmxObjectGroup.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObjectGroup.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); tmxObjectGroup.Properties = TmxProperties.FromXml(xml); PointF offset = new PointF(0, 0); offset.X = TmxHelper.GetAttributeAsFloat(xml, "offsetx", 0); offset.Y = TmxHelper.GetAttributeAsFloat(xml, "offsety", 0); tmxObjectGroup.Offset = offset; // Get all the objects Program.WriteLine("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxMap); tmxObjectGroup.Objects = objects.ToList(); return(tmxObjectGroup); }
public static TmxObject FromXml(XElement xml, TmxObjectGroup tmxObjectGroup, TmxMap tmxMap) { Logger.WriteVerbose("Parsing object ..."); uint attributeAsUInt = TmxHelper.GetAttributeAsUInt(xml, "tid", 0u); if (attributeAsUInt != 0 && tmxMap.Templates.TryGetValue(attributeAsUInt, out TgxTemplate value)) { xml = value.Templatize(xml); tmxMap = value.TemplateGroupMap; } TmxObject tmxObject = null; if (xml.Element("ellipse") != null) { tmxObject = new TmxObjectEllipse(); } else if (xml.Element("polygon") != null) { tmxObject = new TmxObjectPolygon(); } else if (xml.Element("polyline") != null) { tmxObject = new TmxObjectPolyline(); } else if (xml.Attribute("gid") != null) { uint attributeAsUInt2 = TmxHelper.GetAttributeAsUInt(xml, "gid"); attributeAsUInt2 = TmxMath.GetTileIdWithoutFlags(attributeAsUInt2); if (tmxMap.Tiles.ContainsKey(attributeAsUInt2)) { tmxObject = new TmxObjectTile(); } else { Logger.WriteWarning("Tile Id {0} not found in tilesets. Using a rectangle instead.\n{1}", attributeAsUInt2, xml.ToString()); tmxObject = new TmxObjectRectangle(); } } else { tmxObject = new TmxObjectRectangle(); } tmxObject.Id = TmxHelper.GetAttributeAsInt(xml, "id", 0); tmxObject.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObject.Type = TmxHelper.GetAttributeAsString(xml, "type", ""); tmxObject.Visible = (TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1); tmxObject.ParentObjectGroup = tmxObjectGroup; float attributeAsFloat = TmxHelper.GetAttributeAsFloat(xml, "x"); float attributeAsFloat2 = TmxHelper.GetAttributeAsFloat(xml, "y"); float attributeAsFloat3 = TmxHelper.GetAttributeAsFloat(xml, "width", 0f); float attributeAsFloat4 = TmxHelper.GetAttributeAsFloat(xml, "height", 0f); float attributeAsFloat5 = TmxHelper.GetAttributeAsFloat(xml, "rotation", 0f); tmxObject.Position = new PointF(attributeAsFloat, attributeAsFloat2); tmxObject.Size = new SizeF(attributeAsFloat3, attributeAsFloat4); tmxObject.Rotation = attributeAsFloat5; tmxObject.Properties = TmxProperties.FromXml(xml); tmxObject.InternalFromXml(xml, tmxMap); return(tmxObject); }
public static List <TmxLayerNode> ListFromXml(XElement xmlRoot, TmxLayerNode parent, TmxMap tmxMap) { List <TmxLayerNode> list = new List <TmxLayerNode>(); foreach (XElement item in xmlRoot.Elements()) { TmxLayerNode tmxLayerNode = null; if (item.Name == (XName)"layer" || item.Name == (XName)"imagelayer") { tmxLayerNode = TmxLayer.FromXml(item, parent, tmxMap); } else if (item.Name == (XName)"objectgroup") { tmxLayerNode = TmxObjectGroup.FromXml(item, parent, tmxMap); } else if (item.Name == (XName)"group") { tmxLayerNode = TmxGroupLayer.FromXml(item, parent, tmxMap); } if (tmxLayerNode != null && tmxLayerNode.Visible && tmxLayerNode.Ignore != IgnoreSettings.True) { list.Add(tmxLayerNode); } } return(list); }
public static List <TmxLayerNode> ListFromXml(XElement xmlRoot, TmxLayerNode parent, TmxMap tmxMap) { List <TmxLayerNode> nodes = new List <TmxLayerNode>(); foreach (var xmlNode in xmlRoot.Elements()) { TmxLayerNode layerNode = null; if (xmlNode.Name == "layer" || xmlNode.Name == "imagelayer") { layerNode = TmxLayer.FromXml(xmlNode, parent, tmxMap); } else if (xmlNode.Name == "objectgroup") { layerNode = TmxObjectGroup.FromXml(xmlNode, parent, tmxMap); } else if (xmlNode.Name == "group") { layerNode = TmxGroupLayer.FromXml(xmlNode, parent, tmxMap); } // If the layer is visible then add it to our list if (layerNode != null && layerNode.Visible) { nodes.Add(layerNode); } } return(nodes); }
public void VisitObjectLayer(TmxObjectGroup objectLayer) { // Object layer does not advance draw index objectLayer.DrawOrderIndex = this.drawOrderIndex; // Either inherit depth buffer index of parent or advance objectLayer.DepthBufferIndex = (objectLayer.ParentNode != null) ? objectLayer.ParentNode.DepthBufferIndex : this.depthBufferIndex++; }
public void VisitObjectLayer(TmxObjectGroup objectLayer) { // Object layer does not advance draw index objectLayer.DrawOrderIndex = this.drawOrderIndex; // Children don't have a depth buffer index. Their parent sets the depth. objectLayer.DepthBufferIndex = (objectLayer.ParentNode != null) ? 0 : this.depthBufferIndex++; }
public TmxTile(TmxMap tmxMap, uint globalId, uint localId, string tilesetName, TmxImage tmxImage) { TmxMap = TmxMap; GlobalId = globalId; LocalId = localId; TmxImage = tmxImage; Properties = new TmxProperties(); ObjectGroup = new TmxObjectGroup(null, TmxMap); Animation = TmxAnimation.FromTileId(globalId); Meshes = new List <TmxMesh>(); }
private List <XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List <XElement> elements = new List <XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); Vector3D pos = PointFToUnityVector(tmxObject.Position); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); XElement objElement = null; if (tmxObject.GetType() == typeof(TmxObjectRectangle)) { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } else if (tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); } else if (tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); } else if (tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { AddTileObjectElements(tmxObject as TmxObjectTile, xmlObject); } else { Program.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objElement); } elements.Add(xmlObject); } return(elements); }
private void ParseAllObjectGroups(XDocument doc) { Program.WriteLine("Parsing objectgroup elements ..."); var groups = from item in doc.Root.Elements("objectgroup") select item; foreach (var g in groups) { TmxObjectGroup tmxObjectGroup = TmxObjectGroup.FromXml(g, this); this.ObjectGroups.Add(tmxObjectGroup); } }
public static TmxObject FromXml(XElement xml, TmxObjectGroup tmxObjectGroup, TmxMap tmxMap) { Program.WriteLine("Parsing object ..."); Program.WriteVerbose(xml.ToString()); // What kind of TmxObject are we creating? TmxObject tmxObject = null; if (xml.Element("ellipse") != null) { tmxObject = new TmxObjectEllipse(); } else if (xml.Element("polygon") != null) { tmxObject = new TmxObjectPolygon(); } else if (xml.Element("polyline") != null) { tmxObject = new TmxObjectPolyline(); } else if (xml.Attribute("gid") != null) { tmxObject = new TmxObjectTile(); } else { // Just a rectangle tmxObject = new TmxObjectRectangle(); } // Data found on every object type tmxObject.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObject.Type = TmxHelper.GetAttributeAsString(xml, "type", ""); tmxObject.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObject.ParentObjectGroup = tmxObjectGroup; float x = TmxHelper.GetAttributeAsFloat(xml, "x"); float y = TmxHelper.GetAttributeAsFloat(xml, "y"); float w = TmxHelper.GetAttributeAsFloat(xml, "width", 0); float h = TmxHelper.GetAttributeAsFloat(xml, "height", 0); float r = TmxHelper.GetAttributeAsFloat(xml, "rotation", 0); tmxObject.Position = new System.Drawing.PointF(x, y); tmxObject.Size = new System.Drawing.SizeF(w, h); tmxObject.Rotation = r; tmxObject.Properties = TmxProperties.FromXml(xml); tmxObject.InternalFromXml(xml, tmxMap); return(tmxObject); }
public static TmxObject FromXml(XElement xml, TmxObjectGroup tmxObjectGroup, TmxMap tmxMap) { Program.WriteLine("Parsing object ..."); Program.WriteVerbose(xml.ToString()); // What kind of TmxObject are we creating? TmxObject tmxObject = null; if (xml.Element("ellipse") != null) { tmxObject = new TmxObjectEllipse(); } else if (xml.Element("polygon") != null) { tmxObject = new TmxObjectPolygon(); } else if (xml.Element("polyline") != null) { tmxObject = new TmxObjectPolyline(); } else if (xml.Attribute("gid") != null) { tmxObject = new TmxObjectTile(); } else { // Just a rectangle tmxObject = new TmxObjectRectangle(); } // Data found on every object type tmxObject.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObject.Type = TmxHelper.GetAttributeAsString(xml, "type", ""); tmxObject.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObject.ParentObjectGroup = tmxObjectGroup; float x = TmxHelper.GetAttributeAsFloat(xml, "x"); float y = TmxHelper.GetAttributeAsFloat(xml, "y"); float w = TmxHelper.GetAttributeAsFloat(xml, "width", 0); float h = TmxHelper.GetAttributeAsFloat(xml, "height", 0); float r = TmxHelper.GetAttributeAsFloat(xml, "rotation", 0); tmxObject.Position = new System.Drawing.PointF(x, y); tmxObject.Size = new System.Drawing.SizeF(w, h); tmxObject.Rotation = r; tmxObject.Properties = TmxProperties.FromXml(xml); tmxObject.InternalFromXml(xml, tmxMap); return tmxObject; }
public static TmxObjectGroup FromXml(XElement xml, TmxLayerNode parent, TmxMap tmxMap) { TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(parent, tmxMap); tmxObjectGroup.FromXmlInternal(xml); tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", new Color32(128, 128, 128, 255)); Logger.WriteVerbose("Parsing objects in object group '{0}'", tmxObjectGroup.Name); IEnumerable <TmxObject> source = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxObjectGroup, tmxMap); tmxObjectGroup.Objects = (from o in source orderby TmxMath.ObjectPointFToMapSpace(tmxMap, o.Position).Y select o).ToList(); return(tmxObjectGroup); }
public void ParseTileXml(XElement elem, TmxMap tmxMap, uint firstId) { Logger.WriteVerbose("Parse tile data (gid = {0}, id {1}) ...", GlobalId, LocalId); Properties = TmxProperties.FromXml(elem); XElement xElement = elem.Element("objectgroup"); if (xElement != null) { ObjectGroup = TmxObjectGroup.FromXml(xElement, null, tmxMap); FixTileColliderObjects(tmxMap); } XElement xElement2 = elem.Element("animation"); if (xElement2 != null) { Animation = TmxAnimation.FromXml(xElement2, firstId); } }
public static TmxObjectGroup FromXml(XElement xml, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(); tmxObjectGroup.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObjectGroup.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); tmxObjectGroup.Properties = TmxProperties.FromXml(xml); // Get all the objects Program.WriteLine("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxMap); tmxObjectGroup.Objects = objects.ToList(); return tmxObjectGroup; }
private void ParseAllObjectGroups(XDocument doc) { Logger.WriteLine("Parsing objectgroup elements ..."); var groups = from item in doc.Root.Elements("objectgroup") select item; foreach (var g in groups) { TmxObjectGroup tmxObjectGroup = TmxObjectGroup.FromXml(g, this); // Object gropus may be ignored if (tmxObjectGroup.Ignore == TmxLayer.IgnoreSettings.True) { // We don't care about this object group. Logger.WriteLine("Ignoring object group layer due to unity:ignore = True property: {0}", tmxObjectGroup.Name); continue; } this.ObjectGroups.Add(tmxObjectGroup); } }
public static TmxObjectGroup FromXml(XElement xml, TmxLayerNode parent, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(parent, tmxMap); tmxObjectGroup.FromXmlInternal(xml); // Color is specific to object group tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); // Get all the objects Logger.WriteVerbose("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxObjectGroup, tmxMap); // The objects are ordered "visually" by Y position tmxObjectGroup.Objects = objects.ToList(); return(tmxObjectGroup); }
public void ParseTileXml(XElement elem, TmxMap tmxMap, uint firstId) { Logger.WriteVerbose("Parse tile data (gid = {0}, id {1}) ...", this.GlobalId, this.LocalId); this.Properties = TmxProperties.FromXml(elem); // Do we have an object group for this tile? XElement elemObjectGroup = elem.Element("objectgroup"); if (elemObjectGroup != null) { this.ObjectGroup = TmxObjectGroup.FromXml(elemObjectGroup, null, tmxMap); FixTileColliderObjects(tmxMap); } // Is this an animated tile? XElement elemAnimation = elem.Element("animation"); if (elemAnimation != null) { this.Animation = TmxAnimation.FromXml(elemAnimation, firstId); } }
private void AddObjectLayerToElement(TmxObjectGroup objectLayer, XElement xmlRoot) { XElement gameObject = new XElement("GameObject"); gameObject.SetAttributeValue("name", objectLayer.Name); // Offset the object layer PointF offset = PointFToUnityVector(objectLayer.Offset); float depth_z = CalculateLayerDepth(objectLayer); gameObject.SetAttributeValue("x", offset.X); gameObject.SetAttributeValue("y", offset.Y); gameObject.SetAttributeValue("z", depth_z); // Add an ObjectLayer component { XElement layerComponent = new XElement("ObjectLayer", new XAttribute("offsetX", objectLayer.Offset.X), new XAttribute("offsetY", objectLayer.Offset.Y), new XAttribute("color", "#" + objectLayer.Color.ToArgb().ToString("x8"))); gameObject.Add(layerComponent); } // Assign special properties AssignUnityProperties(objectLayer, gameObject, PrefabContext.ObjectLayer); AssignTiledProperties(objectLayer, gameObject); List <XElement> colliders = CreateObjectElementList(objectLayer); if (colliders.Count() > 0) { gameObject.Add(colliders); } // Add to our root xmlRoot.Add(gameObject); }
public static TmxObjectGroup FromXml(XElement xml, TmxMap tmxMap) { Debug.Assert(xml.Name == "objectgroup"); TmxObjectGroup tmxObjectGroup = new TmxObjectGroup(tmxMap); // Order within Xml file is import for layer types tmxObjectGroup.XmlElementIndex = xml.NodesBeforeSelf().Count(); tmxObjectGroup.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObjectGroup.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObjectGroup.Opacity = TmxHelper.GetAttributeAsFloat(xml, "opacity", 1); tmxObjectGroup.Color = TmxHelper.GetAttributeAsColor(xml, "color", Color.FromArgb(128, 128, 128)); tmxObjectGroup.Properties = TmxProperties.FromXml(xml); // Set the "ignore" setting on this object group tmxObjectGroup.Ignore = tmxObjectGroup.Properties.GetPropertyValueAsEnum <IgnoreSettings>("unity:ignore", IgnoreSettings.False); PointF offset = new PointF(0, 0); offset.X = TmxHelper.GetAttributeAsFloat(xml, "offsetx", 0); offset.Y = TmxHelper.GetAttributeAsFloat(xml, "offsety", 0); tmxObjectGroup.Offset = offset; // Get all the objects Logger.WriteLine("Parsing objects in object group '{0}'", tmxObjectGroup.Name); var objects = from obj in xml.Elements("object") select TmxObject.FromXml(obj, tmxObjectGroup, tmxMap); // The objects are ordered "visually" by Y position tmxObjectGroup.Objects = objects.OrderBy(o => TmxMath.ObjectPointFToMapSpace(tmxMap, o.Position).Y).ToList(); // Are we using a unity:layer override? tmxObjectGroup.UnityLayerOverrideName = tmxObjectGroup.Properties.GetPropertyValueAsString("unity:layer", ""); return(tmxObjectGroup); }
private List <XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List <XElement> elements = new List <XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); // Transform object locaction into map space (needed for isometric and hex modes) PointF xfPosition = TmxMath.ObjectPointFToMapSpace(this.tmxMap, tmxObject.Position); PointF pos = PointFToUnityVector(xfPosition); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); // If we're not using a unity:layer override and there is an Object Type to go with this object then use it if (String.IsNullOrEmpty(objectGroup.UnityLayerOverrideName)) { xmlObject.SetAttributeValue("layer", tmxObject.Type); } XElement objElement = null; if (tmxObject.GetType() == typeof(TmxObjectRectangle)) { if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { TmxObjectPolygon tmxIsometricRectangle = TmxObjectPolygon.FromRectangle(this.tmxMap, tmxObject as TmxObjectRectangle); objElement = CreatePolygonColliderElement(tmxIsometricRectangle); } else { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } } else if (tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); } else if (tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); } else if (tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { AddTileObjectElements(tmxObject as TmxObjectTile, xmlObject); } else { Program.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objElement); } elements.Add(xmlObject); } return(elements); }
private List<XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List<XElement> elements = new List<XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); // Transform object locaction into map space (needed for isometric and hex modes) PointF xfPosition = TmxMath.ObjectPointFToMapSpace(this.tmxMap, tmxObject.Position); PointF pos = PointFToUnityVector(xfPosition); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); // If we're not using a unity:layer override and there is an Object Type to go with this object then use it if (String.IsNullOrEmpty(objectGroup.UnityLayerOverrideName)) { xmlObject.SetAttributeValue("layer", tmxObject.Type); } XElement objElement = null; if (tmxObject.GetType() == typeof(TmxObjectRectangle)) { if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { TmxObjectPolygon tmxIsometricRectangle = TmxObjectPolygon.FromRectangle(this.tmxMap, tmxObject as TmxObjectRectangle); objElement = CreatePolygonColliderElement(tmxIsometricRectangle); } else { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } } else if (tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); } else if (tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); } else if (tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { // TileObjects are off by a half-width in Isometric mode if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { xmlObject.SetAttributeValue("x", pos.X - this.tmxMap.TileWidth * 0.5f * Tiled2Unity.Settings.Scale); } // Apply z-cooridnate for use with the depth buffer // (Again, this is complicated by the fact that object tiles position is WRT the bottom edge of a tile) if (Tiled2Unity.Settings.DepthBufferEnabled) { float mapLogicalHeight = this.tmxMap.MapSizeInPixels().Height; float tileLogicalHeight = this.tmxMap.TileHeight; float logicalPos_y = (-pos.Y / Tiled2Unity.Settings.Scale) - tileLogicalHeight; float depth_z = logicalPos_y / mapLogicalHeight * -1.0f; xmlObject.SetAttributeValue("z", depth_z == -0 ? 0 : depth_z); } AddTileObjectElements(tmxObject as TmxObjectTile, xmlObject); } else { Logger.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objElement); } elements.Add(xmlObject); } return elements; }
private List <XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List <XElement> elements = new List <XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); // Transform object locaction into map space (needed for isometric and hex modes) PointF xfPosition = TmxMath.ObjectPointFToMapSpace(this.tmxMap, tmxObject.Position); PointF pos = PointFToUnityVector(xfPosition); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); // If we're not using a unity:layer override and there is an Object Type to go with this object then use it if (String.IsNullOrEmpty(objectGroup.UnityLayerOverrideName)) { // why would we /ever/ do this, christ //xmlObject.SetAttributeValue("layer", tmxObject.Type); } XElement objElement = null; XElement objComponent = new XElement("TmxObjectComponent", new XAttribute("tmx-object-id", tmxObject.Id), new XAttribute("tmx-object-name", tmxObject.Name), new XAttribute("tmx-object-type", tmxObject.Type), new XAttribute("tmx-object-x", tmxObject.Position.X), new XAttribute("tmx-object-y", tmxObject.Position.Y), new XAttribute("tmx-object-width", tmxObject.Size.Width), new XAttribute("tmx-object-height", tmxObject.Size.Height), new XAttribute("tmx-object-rotation", tmxObject.Rotation)); // Do not create colliders if the are being ignored. (Still want to creat the game object though) bool ignoringCollisions = (objectGroup.Ignore == TmxLayerNode.IgnoreSettings.Collision); if (!ignoringCollisions && tmxObject.GetType() == typeof(TmxObjectRectangle)) { if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { TmxObjectPolygon tmxIsometricRectangle = TmxObjectPolygon.FromRectangle(this.tmxMap, tmxObject as TmxObjectRectangle); objElement = CreatePolygonColliderElement(tmxIsometricRectangle); } else { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } // Set object component type objComponent.Name = "RectangleObjectComponent"; } else if (!ignoringCollisions && tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); // Set the component type objComponent.Name = "CircleObjectComponent"; } else if (!ignoringCollisions && tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); // Set the component type objComponent.Name = "PolygonObjectComponent"; } else if (!ignoringCollisions && tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); // Set the component type objComponent.Name = "PolylineObjectComponent"; } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { TmxObjectTile tmxObjectTile = tmxObject as TmxObjectTile; // Apply z-cooridnate for use with the depth buffer if (Tiled2Unity.Settings.DepthBufferEnabled) { float depth_z = CalculateFaceDepth(tmxObjectTile.Position.Y, tmxMap.MapSizeInPixels.Height); xmlObject.SetAttributeValue("z", depth_z); } AddTileObjectElements(tmxObjectTile, xmlObject, objComponent); } else { Logger.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objComponent); xmlObject.Add(objElement); } elements.Add(xmlObject); } return(elements); }
public static TmxObject FromXml(XElement xml, TmxObjectGroup tmxObjectGroup, TmxMap tmxMap) { Program.WriteLine("Parsing object ..."); Program.WriteVerbose(xml.ToString()); // What kind of TmxObject are we creating? TmxObject tmxObject = null; if (xml.Element("ellipse") != null) { tmxObject = new TmxObjectEllipse(); } else if (xml.Element("polygon") != null) { tmxObject = new TmxObjectPolygon(); } else if (xml.Element("polyline") != null) { tmxObject = new TmxObjectPolyline(); } else if (xml.Attribute("gid") != null) { uint gid = TmxHelper.GetAttributeAsUInt(xml, "gid"); gid = TmxMath.GetTileIdWithoutFlags(gid); if (tmxMap.Tiles.ContainsKey(gid)) { tmxObject = new TmxObjectTile(); } else { // For some reason, the tile is not in any of our tilesets // Warn the user and use a rectangle Program.WriteWarning("Tile Id {0} not found in tilesets. Using a rectangle instead.\n{1}", gid, xml.ToString()); tmxObject = new TmxObjectRectangle(); } } else { // Just a rectangle tmxObject = new TmxObjectRectangle(); } // Data found on every object type tmxObject.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObject.Type = TmxHelper.GetAttributeAsString(xml, "type", ""); tmxObject.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObject.ParentObjectGroup = tmxObjectGroup; float x = TmxHelper.GetAttributeAsFloat(xml, "x"); float y = TmxHelper.GetAttributeAsFloat(xml, "y"); float w = TmxHelper.GetAttributeAsFloat(xml, "width", 0); float h = TmxHelper.GetAttributeAsFloat(xml, "height", 0); float r = TmxHelper.GetAttributeAsFloat(xml, "rotation", 0); tmxObject.Position = new System.Drawing.PointF(x, y); tmxObject.Size = new System.Drawing.SizeF(w, h); tmxObject.Rotation = r; tmxObject.Properties = TmxProperties.FromXml(xml); tmxObject.InternalFromXml(xml, tmxMap); return tmxObject; }
public static TmxObject FromXml(XElement xml, TmxObjectGroup tmxObjectGroup, TmxMap tmxMap) { Logger.WriteLine("Parsing object ..."); // What kind of TmxObject are we creating? TmxObject tmxObject = null; if (xml.Element("ellipse") != null) { tmxObject = new TmxObjectEllipse(); } else if (xml.Element("polygon") != null) { tmxObject = new TmxObjectPolygon(); } else if (xml.Element("polyline") != null) { tmxObject = new TmxObjectPolyline(); } else if (xml.Attribute("gid") != null) { uint gid = TmxHelper.GetAttributeAsUInt(xml, "gid"); gid = TmxMath.GetTileIdWithoutFlags(gid); if (tmxMap.Tiles.ContainsKey(gid)) { tmxObject = new TmxObjectTile(); } else { // For some reason, the tile is not in any of our tilesets // Warn the user and use a rectangle Logger.WriteWarning("Tile Id {0} not found in tilesets. Using a rectangle instead.\n{1}", gid, xml.ToString()); tmxObject = new TmxObjectRectangle(); } } else { // Just a rectangle tmxObject = new TmxObjectRectangle(); } // Data found on every object type tmxObject.Name = TmxHelper.GetAttributeAsString(xml, "name", ""); tmxObject.Type = TmxHelper.GetAttributeAsString(xml, "type", ""); tmxObject.Visible = TmxHelper.GetAttributeAsInt(xml, "visible", 1) == 1; tmxObject.ParentObjectGroup = tmxObjectGroup; float x = TmxHelper.GetAttributeAsFloat(xml, "x"); float y = TmxHelper.GetAttributeAsFloat(xml, "y"); float w = TmxHelper.GetAttributeAsFloat(xml, "width", 0); float h = TmxHelper.GetAttributeAsFloat(xml, "height", 0); float r = TmxHelper.GetAttributeAsFloat(xml, "rotation", 0); tmxObject.Position = new System.Drawing.PointF(x, y); tmxObject.Size = new System.Drawing.SizeF(w, h); tmxObject.Rotation = r; tmxObject.Properties = TmxProperties.FromXml(xml); tmxObject.InternalFromXml(xml, tmxMap); return(tmxObject); }
private List <XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List <XElement> elements = new List <XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); // Transform object locaction into map space (needed for isometric and hex modes) PointF xfPosition = TmxMath.ObjectPointFToMapSpace(this.tmxMap, tmxObject.Position); PointF pos = PointFToUnityVector(xfPosition); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); // If we're not using a unity:layer override and there is an Object Type to go with this object then use it if (String.IsNullOrEmpty(objectGroup.UnityLayerOverrideName)) { xmlObject.SetAttributeValue("layer", tmxObject.Type); } XElement objElement = null; if (tmxObject.GetType() == typeof(TmxObjectRectangle)) { if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { TmxObjectPolygon tmxIsometricRectangle = TmxObjectPolygon.FromRectangle(this.tmxMap, tmxObject as TmxObjectRectangle); objElement = CreatePolygonColliderElement(tmxIsometricRectangle); } else { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } } else if (tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); } else if (tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); } else if (tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { TmxObjectTile tmxObjectTile = tmxObject as TmxObjectTile; // Apply z-cooridnate for use with the depth buffer // (Again, this is complicated by the fact that object tiles position is WRT the bottom edge of a tile) if (Tiled2Unity.Settings.DepthBufferEnabled) { float mapLogicalHeight = this.tmxMap.MapSizeInPixels().Height; float tileLogicalHeight = this.tmxMap.TileHeight; float logicalPos_y = (-pos.Y / Tiled2Unity.Settings.Scale) - tileLogicalHeight; float depth_z = CalculateFaceDepth(logicalPos_y, mapLogicalHeight); xmlObject.SetAttributeValue("z", depth_z); } AddTileObjectElements(tmxObject as TmxObjectTile, xmlObject); } else { Logger.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objElement); } elements.Add(xmlObject); } return(elements); }
private List<XElement> CreateObjectElementList(TmxObjectGroup objectGroup) { List<XElement> elements = new List<XElement>(); foreach (TmxObject tmxObject in objectGroup.Objects) { // All the objects/colliders in our object group need to be separate game objects because they can have unique tags/layers XElement xmlObject = new XElement("GameObject", new XAttribute("name", tmxObject.GetNonEmptyName())); // Transform object locaction into map space (needed for isometric and hex modes) PointF xfPosition = TmxMath.ObjectPointFToMapSpace(this.tmxMap, tmxObject.Position); PointF pos = PointFToUnityVector(xfPosition); xmlObject.SetAttributeValue("x", pos.X); xmlObject.SetAttributeValue("y", pos.Y); xmlObject.SetAttributeValue("rotation", tmxObject.Rotation); // MikeW // Copy over the type attribute into the property block if (tmxObject.Type != null && tmxObject.Type != "") { XElement xmlProp = new XElement("Property", new XAttribute("name", "Type"), new XAttribute("value", tmxObject.Type)); xmlObject.Add(xmlProp); } AssignUnityProperties(tmxObject, xmlObject, PrefabContext.Object); AssignTiledProperties(tmxObject, xmlObject); // If we're not using a unity:layer override and there is an Object Type to go with this object then use it if (String.IsNullOrEmpty(objectGroup.UnityLayerOverrideName)) { xmlObject.SetAttributeValue("layer", tmxObject.Type); } XElement objElement = null; if (tmxObject.GetType() == typeof(TmxObjectRectangle)) { if (this.tmxMap.Orientation == TmxMap.MapOrientation.Isometric) { TmxObjectPolygon tmxIsometricRectangle = TmxObjectPolygon.FromRectangle(this.tmxMap, tmxObject as TmxObjectRectangle); objElement = CreatePolygonColliderElement(tmxIsometricRectangle); } else { objElement = CreateBoxColliderElement(tmxObject as TmxObjectRectangle); } } else if (tmxObject.GetType() == typeof(TmxObjectEllipse)) { objElement = CreateCircleColliderElement(tmxObject as TmxObjectEllipse, objectGroup.Name); } else if (tmxObject.GetType() == typeof(TmxObjectPolygon)) { objElement = CreatePolygonColliderElement(tmxObject as TmxObjectPolygon); } else if (tmxObject.GetType() == typeof(TmxObjectPolyline)) { objElement = CreateEdgeColliderElement(tmxObject as TmxObjectPolyline); } else if (tmxObject.GetType() == typeof(TmxObjectTile)) { AddTileObjectElements(tmxObject as TmxObjectTile, xmlObject); } else { Program.WriteLine("Object '{0}' has been added for use with custom importers", tmxObject); } if (objElement != null) { xmlObject.Add(objElement); } elements.Add(xmlObject); } return elements; }