Esempio n. 1
0
        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;
                    }
                    }
                }
            }
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
                    }
                    }
                }
            }
        }