public void Update(GameTime gameTime) { if (_bindings.JustPressed(Bindings.Restart)) { if (_winnerIsYou) { _screens.TransitionTo <LevelScreen, LevelSettings>(LD46Game.Level0Settings !); } else { _screens.TransitionTo <LevelScreen, LevelSettings>(_settings); } } if (_toot && _bindings.JustPressed(Bindings.Skip)) { _screens.TransitionTo <LevelScreen, LevelSettings>(_settings.NextLevel); } if (_levelView.HasFadedOut && _settings.NextLevel != null) { _screens.TransitionTo <LevelScreen, LevelSettings>(_settings.NextLevel); } float deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds; if (Level.SlowMoTimer > 0f) { deltaTime /= 2f; } Level.Update(deltaTime); if (Level.PhysicsWorld.TryGetBody(_torchEntity.BodyID, out Body? torchBody)) { if (!_hasWon && torchBody.Position.Y + torchBody.Bounds.Center.Y <= Level.FinishHeight) { _hasWon = true; Level.SlowMoTimer = float.MaxValue; } if (_hasWon) { Level.CameraCenter += (torchBody.Position + torchBody.Bounds.Center - Level.CameraCenter) * 5f * (float)gameTime.ElapsedGameTime.TotalSeconds; if (_winTimer < 1f) { _winTimer += deltaTime; if (_winTimer >= 1f) { _levelView.FadeOut(); } } } } float waterSpeedModifier = 1f; if (Level.PhysicsWorld.TryGetBody(_playerEntity.BodyID, out Body? playerBody)) { if (!_hasWon) { Level.CameraCenter = playerBody.Position + playerBody.Bounds.Center; } float yDistance = Math.Abs(playerBody.Position.Y - (Level.TileMap.Height * PhysicsConstants.TileSize - Level.WaterLevel)); waterSpeedModifier *= Math.Max(yDistance * yDistance / 100000f, 1f); } Level.WaterLevel += _settings.WaterSpeed * waterSpeedModifier * deltaTime; if (_playerEntity.HasLostAllHope) { _levelView.ShowLoseScreen(); } _levelView.Update(Level, deltaTime); }