public override void _Process(float delta) { FluidSystem.Process(delta); TimedLifeSystem.Process(delta); ProcessSystem.Process(delta); microbeAISystem.Process(delta); if (gameOver) { // Player is extinct and has lost the game // Show the game lost popup if not already visible HUD.ShowExtinctionBox(); return; } if (Player != null) { spawner.Process(delta, Player.Translation); Clouds.ReportPlayerPosition(Player.Translation); } else { if (!spawnedPlayer) { GD.PrintErr("MicrobeStage was entered without spawning the player"); SpawnPlayer(); } else { // Respawn the player once the timer is up playerRespawnTimer -= delta; if (playerRespawnTimer <= 0) { HandlePlayerRespawn(); } } } // Start auto-evo if not already and settings have auto-evo be started during gameplay if (Settings.Instance.RunAutoEvoDuringGamePlay) { GameWorld.IsAutoEvoFinished(true); } }
public override void _Process(float delta) { // https://github.com/Revolutionary-Games/Thrive/issues/1976 if (delta <= 0) { return; } FluidSystem.Process(delta); TimedLifeSystem.Process(delta); ProcessSystem.Process(delta); microbeAISystem.Process(delta); if (gameOver) { guidanceLine.Visible = false; // Player is extinct and has lost the game // Show the game lost popup if not already visible HUD.ShowExtinctionBox(); return; } if (Player != null) { spawner.Process(delta, Player.Translation, Player.Rotation); Clouds.ReportPlayerPosition(Player.Translation); TutorialState.SendEvent(TutorialEventType.MicrobePlayerOrientation, new RotationEventArgs(Player.Transform.basis, Player.RotationDegrees), this); TutorialState.SendEvent(TutorialEventType.MicrobePlayerCompounds, new CompoundBagEventArgs(Player.Compounds), this); TutorialState.SendEvent(TutorialEventType.MicrobePlayerTotalCollected, new CompoundEventArgs(Player.TotalAbsorbedCompounds), this); elapsedSinceCompoundPositionCheck += delta; if (elapsedSinceCompoundPositionCheck > Constants.TUTORIAL_COMPOUND_POSITION_UPDATE_INTERVAL) { elapsedSinceCompoundPositionCheck = 0; if (TutorialState.WantsNearbyCompoundInfo()) { TutorialState.SendEvent(TutorialEventType.MicrobeCompoundsNearPlayer, new CompoundPositionEventArgs(Clouds.FindCompoundNearPoint(Player.Translation, glucose)), this); } guidancePosition = TutorialState.GetPlayerGuidancePosition(); } if (guidancePosition != null) { guidanceLine.Visible = true; guidanceLine.LineStart = Player.Translation; guidanceLine.LineEnd = guidancePosition.Value; } else { guidanceLine.Visible = false; } } else { guidanceLine.Visible = false; if (!spawnedPlayer) { GD.PrintErr("MicrobeStage was entered without spawning the player"); SpawnPlayer(); } else { // Respawn the player once the timer is up playerRespawnTimer -= delta; if (playerRespawnTimer <= 0) { HandlePlayerRespawn(); } } } // Start auto-evo if stage entry finished, don't need to auto save, // settings have auto-evo be started during gameplay and auto-evo is not already started if (TransitionFinished && !wantsToSave && Settings.Instance.RunAutoEvoDuringGamePlay) { GameWorld.IsAutoEvoFinished(true); } // Save if wanted if (TransitionFinished && wantsToSave) { if (!CurrentGame.FreeBuild) { SaveHelper.AutoSave(this); } wantsToSave = false; } }