/// <summary> /// Handles respawning the player and checking for extinction /// </summary> private void HandlePlayerRespawn() { var playerSpecies = GameWorld.PlayerSpecies; // Decrease the population by the constant for the player dying GameWorld.AlterSpeciesPopulation( playerSpecies, Constants.PLAYER_DEATH_POPULATION_LOSS_CONSTANT, TranslationServer.Translate("PLAYER_DIED"), true, Constants.PLAYER_DEATH_POPULATION_LOSS_COEFFICIENT); // Respawn if not extinct (or freebuild) if (playerSpecies.Population <= 0 && !CurrentGame.FreeBuild) { gameOver = true; } else { // Player is not extinct, so can respawn SpawnPlayer(); } }
/// <summary> /// Switches to the editor /// </summary> public void MoveToEditor() { // Increase the population by the constant for the player reproducing var playerSpecies = GameWorld.PlayerSpecies; GameWorld.AlterSpeciesPopulation( playerSpecies, Constants.PLAYER_REPRODUCTION_POPULATION_GAIN_CONSTANT, "player reproduced", false, Constants.PLAYER_REPRODUCTION_POPULATION_GAIN_COEFFICIENT); var scene = SceneManager.Instance.LoadScene(MainGameState.MicrobeEditor); var editor = (MicrobeEditor)scene.Instance(); editor.CurrentGame = CurrentGame; editor.ReturnToStage = this; // We don't free this here as the editor will return to this scene if (SceneManager.Instance.SwitchToScene(editor, true) != this) { throw new Exception("failed to keep the current scene root"); } }
/// <summary> /// Copies this microbe (if this isn't the player). The new /// microbe will not have the stored compounds of this one. /// </summary> private void ReadyToReproduce() { if (IsPlayerMicrobe) { // The player doesn't split automatically allOrganellesDivided = true; OnReproductionStatus?.Invoke(this, Colony == null); } else { // Return the first cell to its normal, non duplicated cell arrangement. if (!Species.PlayerSpecies) { GameWorld.AlterSpeciesPopulation(Species, Constants.CREATURE_REPRODUCE_POPULATION_GAIN, TranslationServer.Translate("REPRODUCED")); } ResetOrganelleLayout(); Divide(); } }