/// <summary> /// Called when returning from the editor /// </summary> public void OnReturnFromEditor() { UpdatePatchSettings(false); // Now the editor increases the generation so we don't do that here anymore // Make sure player is spawned SpawnPlayer(); // Check win conditions if (!CurrentGame.FreeBuild && Player.Species.Generation >= 20 && Player.Species.Population >= 300 && !wonOnce) { HUD.ToggleWinBox(); wonOnce = true; } // Update the player's cell Player.ApplySpecies(Player.Species); // Spawn another cell from the player species Player.ResetOrganelleLayout(); Player.Divide(); HUD.OnEnterStageTransition(); HUD.HideReproductionDialog(); StartMusic(); if (!CurrentGame.FreeBuild) { SaveHelper.AutoSave(this); } }
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; } }