예제 #1
0
        public static BackdropInfo LoadBackdrop(LevelTags tags)
        {
            var backdropInfo = new BackdropInfo();

            var sizeList = tags.GetTag <int[]>("Size");

            backdropInfo.Width  = sizeList[0];
            backdropInfo.Height = sizeList[1];

            var posList = tags.GetTag <float[]>("Position");

            backdropInfo.Position = new Vector3(posList[0], posList[1], posList[2]);

            if (tags.TagExists("Rotation"))
            {
                var rotationList = tags.GetTag <float[]>("Rotation");
                backdropInfo.Rotation = new Vector3(rotationList[0], rotationList[1], rotationList[2]);
            }

            backdropInfo.BackdropType = tags.GetTag <string>("Type");

            backdropInfo.TexturePath      = tags.GetTag <string>("TexturePath");
            backdropInfo.TextureRectangle = tags.GetTag <Microsoft.Xna.Framework.Rectangle>("Texture");

            if (tags.TagExists("Trigger"))
            {
                backdropInfo.Trigger = tags.GetTag <string>("Trigger");
            }

            return(backdropInfo);
        }
예제 #2
0
        public static LevelInfo Load(string text, string path)
        {
            var data = text.Split(new [] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToArray();

            var levelTags  = new LevelTags();
            var actionTags = new LevelTags();
            var entities   = new List <EntityInfo>();
            var structures = new List <StructureInfo>();
            var offsetMaps = new List <OffsetMapInfo>();
            var shader     = new ShaderInfo();
            var backdrop   = new BackdropInfo();

            var list = new List <LevelTag>(); // for debug purpose

            for (var i = 0; i < data.Length; i++)
            {
                if (data[i].Contains("{") && data[i].Contains("}"))
                {
                    data[i] = data[i].Remove(0, data[i].IndexOf("{", StringComparison.Ordinal) + 2);

                    var tagType  = LevelTagType.None;
                    var currLine = data[i];
                    data[i] = data[i].Remove(0, data[i].IndexOf("{", StringComparison.Ordinal) + 2);

                    data[i] = data[i].Remove(0, data[i].IndexOf("[", StringComparison.Ordinal) + 1);
                    data[i] = data[i].Remove(data[i].Length - 3, 3);

                    var tags = GetTags(data[i]);

                    if (currLine.ToLowerInvariant().StartsWith(@"structure"""))//
                    {
                        tagType = LevelTagType.Structure;

                        var map      = tags.GetTag <string>("map");
                        var offset   = tags.GetTag <float[]>("offset");
                        var rotation = tags.TagExists("Rotation") ? tags.GetTag <int>("Rotation") : -1;
                        var addNPC   = tags.TagExists("AddNPC") && tags.GetTag <bool>("AddNPC");
                        structures.Add(new StructureInfo()
                        {
                            Map      = map,
                            Offset   = new Vector3(offset[0], offset[1], offset[2]),
                            Rotation = rotation,
                            AddNPC   = addNPC
                        });
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"entity"""))
                    {
                        tagType = LevelTagType.Entity;
                        entities.AddRange(TagsLoader.LoadEntity(tags));
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"floor"""))
                    {
                        tagType = LevelTagType.Floor;
                        entities.AddRange(TagsLoader.LoadFloor(tags));
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"entityfield"""))
                    {
                        tagType = LevelTagType.EntityField;
                        entities.AddRange(TagsLoader.LoadEntityField(tags));
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"level"""))
                    {
                        tagType   = LevelTagType.Level;
                        levelTags = new LevelTags(tags);
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"actions"""))
                    {
                        tagType    = LevelTagType.LevelActions;
                        actionTags = new LevelTags(tags);
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"npc"""))
                    {
                        tagType = LevelTagType.NPC;
                        //entities.Add(TagsLoader.LoadNpc(tags));
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"shader"""))
                    {
                        tagType = LevelTagType.Shader;
                        shader  = TagsLoader.LoadShader(tags);
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"offsetmap"""))
                    {
                        tagType = LevelTagType.OffsetMap;

                        var map    = tags.GetTag <string>("map");
                        var offset = tags.GetTag <int[]>("offset");
                        offsetMaps.Add(new OffsetMapInfo()
                        {
                            Map    = map,
                            Offset = offset.Length == 2 ? new Vector3(offset[0], offset[1], 0) : new Vector3(offset[0], offset[1], offset[2])
                        });
                    }
                    else if (currLine.ToLowerInvariant().StartsWith(@"backdrop"""))
                    {
                        tagType  = LevelTagType.Backdrop;
                        backdrop = TagsLoader.LoadBackdrop(tags);
                    }

                    list.Add(new LevelTag(tagType, tags));
                }
            }

            var levelInfo = new LevelInfo(levelTags, path, actionTags, entities, structures, offsetMaps, shader, backdrop);

            foreach (var entity in levelInfo.Entities)
            {
                entity.Parent = levelInfo;
            }
            return(levelInfo);
        }