public void EndTurn() { // check if we won if (IsVictorious()) { GameOver(); SaveData(); return; } // check if we need to return crew from a mission if (Ship.AvailableCrewCount + Ship.ReturningCrewCount < 1 && Ship.MissionCrewCount > 0) { Message = "You need to return a crew member from a mission because we won't have any available crew for the next turn. Say return crew from a mission to do that. "; return; } Ship.EndTurn(); GameState = GameState.PlayerTurn; if (ThreatManager.ThreatDeck.Count > 0) { ThreatManager.DrawThreat(); } ThreatManager.ActivateThreats(); // reset threats when their turn is over ThreatManager.ResetThreats(); // check if we are dead if (IsShipDestroyed()) { GameOver(); SaveData(); return; } // check if we won, some threats can kill themselves when activating if (IsVictorious()) { GameOver(); SaveData(); return; } // check if we're out of crew to roll if (AreCrewIncapacitated()) { RepeatMessage = $"I am sorry, captain. All of our crew is incapacitated. {SoundFx.GameOver}Game over. To start a new game, say new game. "; Message += RepeatMessage; RepromptMessage = "Game over. To play again, say new game. "; GameOver(); SaveData(); return; } Message += $"Rolling the crew dice. {SoundFx.Dice} "; Ship.RollCrewDice(); // check if ship is destroyed, this can happen if threat deck is empty and we rolled three scanners that deals damage if (IsShipDestroyed()) { GameOver(); SaveData(); return; } Message += $"We have {Ship.GetAvailableCrewAsString()}. "; Message += Ship.ScannerCount > 0 ? $"Number of locked threats in our scanners is {Ship.ScannerCount}. " : ""; Message += ThreatManager.InternalThreats.Count > 0 ? $"Number of active internal threats is {ThreatManager.InternalThreats.Count}. {ThreatManager.GetThreatsAsString(true,false)}. " : ""; Message += ThreatManager.ExternalThreats.Count > 0 ? $"Number of active external threats is {ThreatManager.ExternalThreats.Count}. {ThreatManager.GetThreatsAsString(false, true)}. " : ""; Message += ThreatManager.ExternalThreats.Count + ThreatManager.InternalThreats.Count < 1 ? "There are no active threats at the moment. " : ""; Message += "What are your orders, captain? "; RepeatMessage = Message; RepromptMessage = "What are your orders, captain? "; SaveData(); }
public void CreateNewGame(int difficulty) { InitializeEventManager(); IsGameInProgress = true; Message = $"Starting a new game. {SoundFx.Beeping} We have traced the distress call coordinates. Prepare to warp. {SoundFx.Warp} Captain, it looks like we warped into a trap! We need to survive until all external threats are destroyed! "; Ship = new HalcyonShip(); Ship.InitializeEvents(_eventManager); ThreatManager = new ThreatManager(); ThreatManager.InitializeEvents(_eventManager); Ship.InitializeShip(); ThreatManager.Initialize(difficulty); Message += $"Rolling the crew dice. {SoundFx.Dice} "; Ship.RollCrewDice(); GameState = GameState.PlayerTurn; Message += $"We have {Ship.GetAvailableCrewAsString()}. "; Message += Ship.ScannerCount > 0 ? $"Number of locked threats in our scanners is {Ship.ScannerCount}. " : ""; Message += ThreatManager.InternalThreats.Count > 0 ? $"Number of active internal threats is {ThreatManager.InternalThreats.Count}. {ThreatManager.GetThreatsAsString(true, false)}. " : ""; Message += ThreatManager.ExternalThreats.Count > 0 ? $"Number of active external threats is {ThreatManager.ExternalThreats.Count}. {ThreatManager.GetThreatsAsString(false, true)}. " : ""; Message += ThreatManager.ExternalThreats.Count + ThreatManager.InternalThreats.Count < 1 ? "There are no active threats at the moment. " : ""; Message += "What are your orders, captain? "; RepeatMessage = Message; RepromptMessage = $"Awaiting your orders, captain. "; SaveData(); }