public Tileset Load(FilePath path) { var tileset = new Tileset(); tileset.FilePath = path; var doc = XDocument.Load(path.Absolute); var reader = doc.Element("Tileset"); if (reader == null) throw new Exception("The specified tileset definition file does not contain a Tileset tag."); var sheetPath = FilePath.FromRelative(reader.Attribute("tilesheet").Value, path.BasePath); tileset.ChangeSheetPath(sheetPath.Absolute); int size; if (!int.TryParse(reader.Attribute("tilesize").Value, out size)) throw new Exception("The tileset definition does not contain a valid tilesize attribute."); tileset.TileSize = size; var propParent = reader.Element("TileProperties"); if (propParent != null) { foreach (XElement propNode in propParent.Elements("Properties")) { var prop = new TileProperties(propNode); tileset.AddProperties(prop); } } foreach (XElement tileNode in reader.Elements("Tile")) { int id = int.Parse(tileNode.Attribute("id").Value); string name = tileNode.Attribute("name").Value; var spriteNode = tileNode.Element("Sprite"); if (spriteNode == null) throw new GameXmlException(tileNode, "All Tile tags must contain a Sprite tag."); var sprite = LoadSprite(spriteNode); var tileSprite = new TileSprite(tileset, sprite); Tile tile = new Tile(id, tileSprite); string propName = "Default"; XAttribute propAttr = tileNode.Attribute("properties"); if (propAttr != null) propName = propAttr.Value; tile.Properties = tileset.GetProperties(propName); tile.Sprite.Play(); tileset.Add(tile); } return tileset; }
public void LoadProperties(XElement doc) { // properties XElement propHead = doc.Element("Properties"); if (propHead != null) { foreach (XElement propNode in propHead.Elements("Properties")) { TileProperties p = new TileProperties(propNode); entityProperties[p.Name] = p; } } }
private void SaveProperties(TileProperties properties, XmlTextWriter writer) { writer.WriteStartElement("Properties"); writer.WriteAttributeString("name", properties.Name); if (properties.Blocking) writer.WriteAttributeString("blocking", "true"); if (properties.Climbable) writer.WriteAttributeString("climbable", "true"); if (properties.Lethal) writer.WriteAttributeString("lethal", "true"); if (properties.GravityMult != 1) writer.WriteAttributeString("gravitymult", properties.GravityMult.ToString()); if (properties.PushX != 0) writer.WriteAttributeString("pushX", properties.PushX.ToString()); if (properties.PushY != 0) writer.WriteAttributeString("pushY", properties.PushY.ToString()); if (properties.ResistX != 1) writer.WriteAttributeString("resistX", properties.ResistX.ToString()); if (properties.ResistY != 1) writer.WriteAttributeString("resistY", properties.ResistY.ToString()); if (properties.DragX != 1) writer.WriteAttributeString("dragX", properties.DragX.ToString()); if (properties.DragY != 1) writer.WriteAttributeString("dragY", properties.DragY.ToString()); if (properties.Sinking != 0) writer.WriteAttributeString("sinking", properties.Sinking.ToString()); if (properties.OnEnter != null) writer.WriteAttributeString("onenter", properties.OnEnter); if (properties.OnLeave != null) writer.WriteAttributeString("onleave", properties.OnLeave); if (properties.OnOver != null) writer.WriteAttributeString("onover", properties.OnOver); writer.WriteEndElement(); }
private void AddProperties() { var properties = new TileProperties() { Name = "New Properties" }; _tileset.AddProperties(properties); _observedProperties.Add(properties); OnPropertyChanged("TileProperties"); }
public void RemoveEntityProperties(TileProperties properties) { _entityProperties.Remove(properties.Name); }
public void AddEntityProperties(TileProperties properties) { _entityProperties[properties.Name] = properties; }
private void ReactToTileEffect(TileProperties properties) { if (MovementSrc != null) { MovementSrc.PushX(properties.PushX); MovementSrc.PushY(properties.PushY); MovementSrc.ResistX(properties.ResistX); MovementSrc.ResistY(properties.ResistY); MovementSrc.DragX(properties.DragX); MovementSrc.DragY(properties.DragY); if (properties.Sinking > 0) { if (Parent.Container.IsGravityFlipped) { if (MovementSrc.VelocityY <= 0) { BlockTop = true; PositionSrc.Offset(0, -1 * properties.Sinking); // don't let gravity accumulate like in MM1 MovementSrc.VelocityY = 0; } } else { if (MovementSrc.VelocityY >= 0) { BlockBottom = true; PositionSrc.Offset(0, properties.Sinking); MovementSrc.VelocityY = 0; } } } } // don't just kill, it needs to be conditional on invincibility if (properties.Lethal && Parent.Name == "Player") Parent.SendMessage(new DamageMessage(null, float.PositiveInfinity)); }
/// <summary> /// See returns /// </summary> /// <param name="tileProperty">Tile property to check</param> /// <param name="property">Property to check as a string</param> /// <returns>True if property is contained in tileProperty</returns> private bool CheckTileProperty(TileProperties tileProperty, string property) { if (property == "Blocking") { return tileProperty.Blocking; } else if (property == "Climbable") { return tileProperty.Climbable; } else if (property == "Lethal") { return tileProperty.Lethal; } else if (property == "Sinking") { return (tileProperty.Sinking != 0) ? true : false; } return false; }