コード例 #1
0
ファイル: TilesetXmlReader.cs プロジェクト: laazer/cs_megaman
        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;
        }
コード例 #2
0
 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;
         }
     }
 }
コード例 #3
0
 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();
 }
コード例 #4
0
 private void AddProperties()
 {
     var properties = new TileProperties() { Name = "New Properties" };
     _tileset.AddProperties(properties);
     _observedProperties.Add(properties);
     OnPropertyChanged("TileProperties");
 }
コード例 #5
0
ファイル: Project.cs プロジェクト: Tesserex/C--MegaMan-Engine
 public void RemoveEntityProperties(TileProperties properties)
 {
     _entityProperties.Remove(properties.Name);
 }
コード例 #6
0
ファイル: Project.cs プロジェクト: Tesserex/C--MegaMan-Engine
 public void AddEntityProperties(TileProperties properties)
 {
     _entityProperties[properties.Name] = properties;
 }
コード例 #7
0
        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));
        }
コード例 #8
0
 /// <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;
 }