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); }
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); }