Exemplo n.º 1
0
        public override void LoadXml(XElement xmlNode)
        {
            string     spriteName     = "Default";
            string     partName       = null;
            XAttribute spriteNameAttr = xmlNode.Attribute("name");

            if (spriteNameAttr != null)
            {
                spriteName = spriteNameAttr.Value;
            }
            XAttribute partAttr = xmlNode.Attribute("part");

            if (partAttr != null)
            {
                partName = partAttr.Value;
            }

            if (xmlNode.Attribute("tilesheet") != null) // explicitly specified sheet for this sprite
            {
                _sheetPath = System.IO.Path.Combine(Game.CurrentGame.BasePath, xmlNode.RequireAttribute("tilesheet").Value);
            }

            Sprite sprite = GameXmlReader.LoadSprite(xmlNode);

            sprite.SheetPath = FilePath.FromAbsolute(_sheetPath, Game.CurrentGame.BasePath);
            Add(spriteName, sprite, partName);
        }
Exemplo n.º 2
0
        public static Sprite GetSpriteFromFile(string filename, string basePath = null)
        {
            String xmlInput = TestHelpers.GetInputFile(filename);

            var xmlNode = XElement.Parse(xmlInput);

            if (basePath == null)
            {
                return(GameXmlReader.LoadSprite(xmlNode));
            }
            else
            {
                return(GameXmlReader.LoadSprite(xmlNode, basePath));
            }
        }
Exemplo n.º 3
0
        public void Load(Project project, XElement xmlNode)
        {
            foreach (var node in xmlNode.Elements("Entity"))
            {
                var info = new EntityInfo()
                {
                    Name     = node.RequireAttribute("name").Value,
                    MaxAlive = node.TryAttribute <int>("maxAlive", 50)
                };

                var editorData = node.Element("EditorData");
                if (editorData != null)
                {
                    info.EditorData = new EntityEditorData()
                    {
                        DefaultSpriteName = editorData.TryAttribute <string>("defaultSprite"),
                        HideFromPlacement = editorData.TryAttribute <bool>("hide", false)
                    };
                }

                FilePath sheetPath = null;
                var      sheetNode = node.Element("Tilesheet");
                if (sheetNode != null)
                {
                    sheetPath = FilePath.FromRelative(sheetNode.Value, project.BaseDir);
                }

                foreach (var spriteNode in node.Elements("Sprite"))
                {
                    if (sheetPath == null)
                    {
                        var sprite = GameXmlReader.LoadSprite(spriteNode, project.BaseDir);
                        info.Sprites.Add(sprite.Name ?? "Default", sprite);
                    }
                    else
                    {
                        var sprite = GameXmlReader.LoadSprite(spriteNode);
                        sprite.SheetPath = sheetPath;
                        info.Sprites.Add(sprite.Name ?? "Default", sprite);
                    }
                }

                project.AddEntity(info);
            }
        }
Exemplo n.º 4
0
        public static Effect LoadEffectAction(XElement node)
        {
            Effect effect = e => { };

            switch (node.Name.LocalName)
            {
            case "Call":
                effect = GetLateBoundEffect(node.Value);
                break;

            case "Spawn":
                effect = LoadSpawnEffect(node);
                break;

            case "Remove":
                effect = entity => { entity.Remove(); };
                break;

            case "Die":
                effect = entity => { entity.Die(); };
                break;

            case "AddInventory":
                string itemName = node.RequireAttribute("item").Value;
                int    quantity = node.TryAttribute <int>("quantity", 1);

                effect = entity =>
                {
                    Game.CurrentGame.Player.CollectItem(itemName, quantity);
                };
                break;

            case "RemoveInventory":
                string itemNameUse = node.RequireAttribute("item").Value;
                int    quantityUse = node.TryAttribute <int>("quantity", 1);

                effect = entity =>
                {
                    Game.CurrentGame.Player.UseItem(itemNameUse, quantityUse);
                };
                break;

            case "UnlockWeapon":
                string weaponName = node.RequireAttribute("name").Value;

                effect = entity =>
                {
                    Game.CurrentGame.Player.UnlockWeapon(weaponName);
                };
                break;

            case "DefeatBoss":
                string name = node.RequireAttribute("name").Value;

                effect = entity =>
                {
                    Game.CurrentGame.Player.DefeatBoss(name);
                };
                break;

            case "Lives":
                int add = int.Parse(node.RequireAttribute("add").Value);
                effect = entity =>
                {
                    Game.CurrentGame.Player.Lives += add;
                };
                break;

            case "GravityFlip":
                bool flip = node.GetValue <bool>();
                effect = entity => { entity.Container.IsGravityFlipped = flip; };
                break;

            case "Func":
                effect = entity => { };
                string[] statements = node.Value.Split(';');
                foreach (string st in statements.Where(st => !string.IsNullOrEmpty(st.Trim())))
                {
                    LambdaExpression lambda = System.Linq.Dynamic.DynamicExpression.ParseLambda(
                        new[] { posParam, moveParam, sprParam, inputParam, collParam, ladderParam, timerParam, healthParam, stateParam, weaponParam, playerParam },
                        typeof(SplitEffect),
                        null,
                        st,
                        dirDict);
                    effect += CloseEffect((SplitEffect)lambda.Compile());
                }
                break;

            case "Trigger":
                string conditionString;
                if (node.Attribute("condition") != null)
                {
                    conditionString = node.RequireAttribute("condition").Value;
                }
                else
                {
                    conditionString = node.Element("Condition").Value;
                }

                Condition condition     = ParseCondition(conditionString);
                Effect    triggerEffect = LoadTriggerEffect(node.Element("Effect"));
                effect += (e) =>
                {
                    if (condition(e))
                    {
                        triggerEffect(e);
                    }
                };
                break;

            case "Pause":
                effect = entity => { entity.Paused = true; };
                break;

            case "Unpause":
                effect = entity => { entity.Paused = false; };
                break;

            case "Next":
                var transfer = GameXmlReader.LoadHandlerTransfer(node);
                effect = e => { Game.CurrentGame.ProcessHandler(transfer); };
                break;

            case "Palette":
                var paletteName  = node.RequireAttribute("name").Value;
                var paletteIndex = node.GetAttribute <int>("index");
                effect = e =>
                {
                    var palette = PaletteSystem.Get(paletteName);
                    if (palette != null)
                    {
                        palette.CurrentIndex = paletteIndex;
                    }
                };
                break;

            case "Delay":
                var delayFrames = node.GetAttribute <int>("frames");
                var delayEffect = LoadEffect(node);
                effect = e =>
                {
                    Engine.Instance.DelayedCall(() => delayEffect(e), null, delayFrames);
                };
                break;

            case "SetVar":
                var varname = node.RequireAttribute("name").Value;
                var value   = node.RequireAttribute("value").Value;
                effect = e =>
                {
                    Game.CurrentGame.Player.SetVar(varname, value);
                };
                break;

            default:
                effect = GameEntity.ParseComponentEffect(node);
                break;
            }
            return(effect);
        }