private static void OnMenuUpdate(object sender, UpdateEventArgs e) { RLKeyPress inputKey = rootConsole.Keyboard.GetKeyPress(); renderRequired = true; if (inputKey != null) { if (inputKey.Key == RLKey.Up) { menuConsole.Print((menuConsole.Width - menuOptions[position].Length) / 2, 40 + position * 5, menuOptions[position], RLColor.White); position--; if (position == -1) { position = 3; } } if (inputKey.Key == RLKey.Down) { menuConsole.Print((menuConsole.Width - menuOptions[position].Length) / 2, 40 + position * 5, menuOptions[position], RLColor.White); position++; if (position == 4) { position = 0; } } menuConsole.Print((menuConsole.Width - menuOptions[position].Length) / 2, 40 + position * 5, menuOptions[position], RLColor.LightRed); if (inputKey.Key == RLKey.Enter) { switch (position) { case 0: { rootConsole.Update -= OnMenuUpdate; rootConsole.Render -= OnMenuRender; rootConsole.Update += OnGameUpdate; rootConsole.Render += OnGameRender; music.Stop(); StartNewGame(); position = 0; break; } case 1: { music.Stop(); try { if (File.Exists("Save.xml")) { XmlReader reader = XmlReader.Create("Save.xml"); ShowWindow(GetConsoleWindow(), 0); SerializedGame game = new SerializedGame(false); game.ReadXml(reader); reader.Close(); ContinueOldGame(game); } } catch { MessageLog.Add("Failed to load the game, new game is started instead"); StartNewGame(); } finally { rootConsole.Update -= OnMenuUpdate; rootConsole.Render -= OnMenuRender; rootConsole.Update += OnGameUpdate; rootConsole.Render += OnGameRender; position = 0; } break; } case 2: { Help(); position = 0; break; } case 3: { rootConsole.Close(); break; } } } } }
public static void ContinueOldGame(SerializedGame game) { Check(); Random = new DotNetRandom(); mapLevel = game.mapLevel; string ConsoleTitle = $"MagiCave - Level {mapLevel}"; rootConsole.Title = ConsoleTitle; Random.Restore(game.Random); steps = game.steps; Player = game.Player; for (int i = 0; i < game.Levels.Length; i++) { SchedulingSystem = new SchedulingSystem(); DungeonMap levelmap = new DungeonMap(); levelmap.Restore(game.Levels[i]); levelmap.Doors = game.Doors[i].ToList(); for (int k = 0; k < mapWidth * mapHeight; k++) { if ((game.Levels[i].Cells[k] & MapState.CellProperties.Explored) == MapState.CellProperties.Explored) { int l; int j; if (k >= mapWidth) { j = k / mapWidth; l = k - j * mapWidth; } else { l = k; j = 0; } levelmap.SetCellProperties(l, j, levelmap.GetCell(l, j).IsTransparent, levelmap.GetCell(l, j).IsWalkable, true); } } //levelmap.Rooms = game.Rooms[i].ToList(); levelmap.Monsters = game.MonstersOnLevel[i].ToList(); foreach (Monster m in levelmap.Monsters) { if (m.Items == null) { m.Items = new List <Interfaces.IItem>(); } } DungeonGenerator gen = new DungeonGenerator(levelmap); gen.Restore(SchedulingSystem); SchedulingSystems.AddLast(SchedulingSystem); Levels.AddLast(levelmap); i++; } CurrentSchedulingSystem = SchedulingSystems.First; CurrentLevel = Levels.First; for (int j = 0; j < mapLevel - 1; j++) { CurrentSchedulingSystem = CurrentSchedulingSystem.Next; CurrentLevel = CurrentLevel.Next; } SchedulingSystem = CurrentSchedulingSystem.Value; DungeonMap = CurrentLevel.Value; MessageLog.Add("Game loaded successfully"); Player = game.Player; DungeonMap.UpdatePlayerFieldOfView(); ts.Add(game.ts); time.Start(); renderRequired = true; }
private static void OnPauseUpdate(object sender, UpdateEventArgs e) { RLKeyPress inputKey = rootConsole.Keyboard.GetKeyPress(); renderRequired = true; if (inputKey != null) { if (inputKey.Key == RLKey.Up) { menuConsole.Print((menuConsole.Width - pauseOptions[position].Length) / 2, 40 + position * 5, pauseOptions[position], RLColor.White); position--; if (position == -1) { position = 3; } } if (inputKey.Key == RLKey.Down) { menuConsole.Print((menuConsole.Width - pauseOptions[position].Length) / 2, 40 + position * 5, pauseOptions[position], RLColor.White); position++; if (position == 4) { position = 0; } } menuConsole.Print((menuConsole.Width - pauseOptions[position].Length) / 2, 40 + position * 5, pauseOptions[position], RLColor.LightRed); if (inputKey.Key == RLKey.Enter) { switch (position) { case 0: { rootConsole.Update -= OnPauseUpdate; rootConsole.Render -= OnMenuRender; rootConsole.Update += OnGameUpdate; rootConsole.Render += OnGameRender; break; } case 1: { rootConsole.Update -= OnPauseUpdate; rootConsole.Render -= OnMenuRender; rootConsole.Update += OnGameUpdate; rootConsole.Render += OnGameRender; StartNewGame(); position = 0; break; } case 2: { menuConsole.Clear(); rootConsole.Update -= OnPauseUpdate; rootConsole.Render -= OnMenuRender; rootConsole.Update += OnMenuUpdate; rootConsole.Render += OnMenuRender; if (File.Exists("Save.xml")) { File.Delete("Save.xml"); } SerializedGame game = new SerializedGame(true); XmlWriter writer = XmlWriter.Create("Save.xml"); game.WriteXml(writer); writer.Close(); FillMenu(); position = 0; break; } case 3: { if (File.Exists("Save.xml")) { File.Delete("Save.xml"); } SerializedGame game = new SerializedGame(true); XmlWriter writer = XmlWriter.Create("Save.xml"); game.WriteXml(writer); writer.Close(); rootConsole.Close(); break; } } } } }