Example #1
0
        protected override async void Update(GameTime gameTime)
        {
            if (IsActive)
            {
                switch (State)
                {
                case GameState.Started:
                {
                    if (!Paused)
                    {
                        player.Update(gameTime);
                        if (player.UpdateOccured)
                        {
                            world.UpdateBlocks();
                        }
                        await world.UpdateAsync();
                    }

                    gameMenu.Update();

                    break;
                }

                case GameState.Loading:
                {
                    State = GameState.Started;

                    currentSave = mainMenu.CurrentSave;

                    time = new Time(currentSave.Parameters.Day, currentSave.Parameters.Hour, currentSave.Parameters.Minute);

                    ScreenshotHandler screenshotHandler = new ScreenshotHandler(GraphicsDevice, Window.ClientBounds.Width,
                                                                                Window.ClientBounds.Height);
                    BlockSelector blockSelector = new BlockSelector(GraphicsDevice);

                    databaseHandler = new DatabaseHandler(this, currentSave.Parameters.SaveName);
                    gameMenu        = new GameMenu(this, GraphicsDevice, time, screenshotHandler, currentSave.Parameters);
                    world           = new WorldManager(gameMenu, databaseHandler, blockSelector, currentSave.Parameters);
                    player          = new Player(this, GraphicsDevice, currentSave.Parameters);
                    renderer        = new Renderer(this, GraphicsDevice, time, world.Region, screenshotHandler, blockSelector);

                    world.SetPlayer(this, player, currentSave.Parameters);

                    if (!File.Exists($@"Saves\{currentSave.Parameters.SaveName}\save_icon.png"))
                    {
                        player.Update(gameTime);
                        world.Update();
                        renderer.Draw(world.ActiveChunks, player);
                        screenshotHandler.SaveIcon(currentSave.Parameters.SaveName, out currentSave.Icon);
                    }

                    break;
                }

                case GameState.Exiting:
                {
                    databaseHandler.Close();

                    player.SaveParameters(currentSave.Parameters);
                    time.SaveParameters(currentSave.Parameters);
                    currentSave.Parameters.Save();

                    player          = null;
                    world           = null;
                    databaseHandler = null;
                    gameMenu        = null;
                    renderer        = null;

                    GC.Collect();

                    State          = GameState.MainMenu;
                    IsMouseVisible = true;

                    break;
                }

                case GameState.MainMenu:
                {
                    mainMenu.Update();
                    break;
                }
                }
            }

            base.Update(gameTime);
        }