public bool SaveLevel(string name) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = " "; settings.NewLineChars = Environment.NewLine; XmlWriter writer = XmlWriter.Create("lvl/" + name + ".xml", settings); writer.WriteStartDocument(); writer.WriteStartElement("Level"); foreach (Entity ent in entities) { writer.WriteStartElement("Entity"); writer.WriteAttributeString("Name", ent.GetType().Name); writer.WriteAttributeString("X", ent.OrigPos.X.ToString()); writer.WriteAttributeString("Y", ent.OrigPos.Y.ToString()); writer.WriteAttributeString("Flipped", ent.Flipped.ToString()); if (ent is InfoBox) { InfoBox infoBox = (InfoBox)ent; writer.WriteAttributeString("InfoString", infoBox.InfoString); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); writer.Dispose(); return(true); }
public bool LoadLevel(string name, bool fromDisk = false) { Assembly assembly; assembly = Assembly.GetExecutingAssembly(); Stream bgStream = assembly.GetManifestResourceStream("TrainBox.gfx.bg.png"); backgroundTexture = new Texture(bgStream); background = new Sprite(); background.Texture = backgroundTexture; entities = null; entities = new List <Entity>(); XmlReader reader = null; Stream levelStream = null; if (fromDisk) { reader = XmlReader.Create("lvl/" + name + ".xml"); } else { levelStream = assembly.GetManifestResourceStream("TrainBox.lvl." + name + ".xml"); reader = XmlReader.Create(levelStream); } Type entType = null; Vector2i entPos = new Vector2i(0, 0); Boolean entFlipped = false; reader.MoveToContent(); while (reader.Read()) { if (reader.Name == "Entity") { string s = reader.GetAttribute("Name"); foreach (Type t in entityTypes) { if (s == t.Name) { entType = t; break; } } entPos.X = Convert.ToInt32(reader.GetAttribute("X")); entPos.Y = Convert.ToInt32(reader.GetAttribute("Y")); entFlipped = Convert.ToBoolean(reader.GetAttribute("Flipped")); Entity a = (Entity)Activator.CreateInstance(entType, entPos); a.Flipped = entFlipped; if (entType == typeof(InfoBox)) { InfoBox infoBox = (InfoBox)a; infoBox.InfoString = reader.GetAttribute("InfoString"); } entities.Add(a); } } reader.Dispose(); FindScrollBounds(); return(true); }
public void Loop(RenderWindow window) { counter++; CursorPosF = new Vector2f(CursorPos.X * 16, CursorPos.Y * 16 + 8); Level.ScrollTo(CursorPosF, false); Level.GetEntities().RemoveAll(a => a.Destroyed); Type entType = Level.EntityTypes[currentEnt]; cursorEnt = (Entity)Activator.CreateInstance(entType, CursorPos); if (buttonDelay == 0) { if (Keyboard.IsKeyPressed(Keyboard.Key.F3) || Keyboard.IsKeyPressed(Keyboard.Key.F5) || Keyboard.IsKeyPressed(Keyboard.Key.F1) ) { showTextWindow = !showTextWindow; if (Keyboard.IsKeyPressed(Keyboard.Key.F3)) { textInputOperation = TextInputOperation.Save; } if (Keyboard.IsKeyPressed(Keyboard.Key.F5)) { textInputOperation = TextInputOperation.Load; } if (Keyboard.IsKeyPressed(Keyboard.Key.F1)) { textInputOperation = TextInputOperation.InfoBox; } if (textInputOperation == TextInputOperation.Save || textInputOperation == TextInputOperation.Load) { textInputString = LevelName; } bool addEvent = true; if (textInputOperation == TextInputOperation.InfoBox) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null && ent is InfoBox) { InfoBox infoBox = (InfoBox)ent; textInputString = infoBox.InfoString; } else { showTextWindow = false; addEvent = false; } } if (addEvent) { if (showTextWindow) { window.TextEntered += TextEntered; } else { window.TextEntered -= TextEntered; } } buttonDelay = 20; } if (showTextWindow) { if (Keyboard.IsKeyPressed(Keyboard.Key.Return)) { if (textInputOperation == TextInputOperation.Save) { LevelName = textInputString; Level.SaveLevel(LevelName); } if (textInputOperation == TextInputOperation.Load) { LevelName = textInputString; Level.LoadLevel(LevelName, true); CollisionMan.Entities = Level.GetEntities(); EntityFinder.Entities = Level.GetEntities(); } if (textInputOperation == TextInputOperation.InfoBox) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null && ent is InfoBox) { InfoBox infoBox = (InfoBox)ent; infoBox.InfoString = textInputString; } } showTextWindow = false; window.TextEntered -= TextEntered; } if (Keyboard.IsKeyPressed(Keyboard.Key.Escape)) { showTextWindow = false; window.TextEntered -= TextEntered; } } } if (buttonDelay == 0 && !showTextWindow) { if (Keyboard.IsKeyPressed(Keyboard.Key.Z)) { if (currentEnt > 0) { currentEnt--; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.X)) { if (currentEnt < Level.EntityTypes.Count - 1) { currentEnt++; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.F12)) { Level.GetEntities().Clear(); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Delete)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Destroyed = true; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.F)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Flipped = !ent.Flipped; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Space)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Destroyed = true; } Entity newEnt = (Entity)Activator.CreateInstance(entType, CursorPos); Level.GetEntities().Add(newEnt); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Right)) { CursorPos = new Vector2i(CursorPos.X + 1, CursorPos.Y); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Left)) { CursorPos = new Vector2i(CursorPos.X - 1, CursorPos.Y); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Up)) { CursorPos = new Vector2i(CursorPos.X, CursorPos.Y - 1); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Down)) { CursorPos = new Vector2i(CursorPos.X, CursorPos.Y + 1); buttonDelay = 10; } } if (buttonDelay > 0) { buttonDelay--; } }