From 57667b3169fd978bd289de7d5b2dfa57963eb79a Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 5 Oct 2017 21:18:01 +0300 Subject: [PATCH] Fixed removed (e.g. eaten) characters not appearing in the round summary, but still spawning during the next round --- .../Source/GameSession/CrewManager.cs | 7 +++++-- .../GameSession/GameModes/SinglePlayerCampaign.cs | 2 ++ .../{ShiftSummary.cs => RoundSummary.cs} | 15 ++++++++------- .../Source/Characters/Character.cs | 12 +++++++++++- .../Source/Characters/CharacterInfo.cs | 4 ++++ .../Source/GameSession/GameSession.cs | 11 ----------- 6 files changed, 30 insertions(+), 21 deletions(-) rename Barotrauma/BarotraumaClient/Source/GameSession/{ShiftSummary.cs => RoundSummary.cs} (88%) diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs index b27125bee..3aa555c95 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs @@ -308,10 +308,13 @@ namespace Barotrauma continue; } - CharacterInfo deadInfo = CharacterInfos.Find(x => c.Info == x); - if (deadInfo != null) CharacterInfos.Remove(deadInfo); + CharacterInfos.Remove(c.Info); } + //remove characterinfos whose character doesn't exist anymore + //(i.e. character was removed during the round) + CharacterInfos.RemoveAll(c => c.Character == null); + characters.Clear(); listBox.ClearChildren(); orderListBox.ClearChildren(); diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs index 2ce879491..3ef0cef3f 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs @@ -240,6 +240,8 @@ namespace Barotrauma } Submarine.Unload(); + + GameMain.LobbyScreen.Select(); } private bool TryEndRound(GUIButton button, object obj) diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/ShiftSummary.cs b/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs similarity index 88% rename from Barotrauma/BarotraumaClient/Source/GameSession/ShiftSummary.cs rename to Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs index fae21d73e..c9aec3750 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/ShiftSummary.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs @@ -59,10 +59,10 @@ namespace Barotrauma GUIListBox listBox = new GUIListBox(new Rectangle(0,y,0,90), null, Alignment.TopLeft, "", innerFrame, true); int x = 0; - foreach (Character character in gameSession.CrewManager.characters) + foreach (CharacterInfo characterInfo in gameSession.CrewManager.CharacterInfos) { - if (GameMain.GameSession.Mission is CombatMission && - character.TeamID != GameMain.GameSession.CrewManager.WinningTeam) + if (GameMain.GameSession.Mission is CombatMission && + characterInfo.TeamID != GameMain.GameSession.CrewManager.WinningTeam) { continue; } @@ -72,15 +72,16 @@ namespace Barotrauma characterFrame.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); characterFrame.CanBeFocused = false; - character.Info.CreateCharacterFrame(characterFrame, - character.Info.Job != null ? (character.Info.Name + '\n' + "(" + character.Info.Job.Name + ")") : character.Info.Name, null); + characterInfo.CreateCharacterFrame(characterFrame, + characterInfo.Job != null ? (characterInfo.Name + '\n' + "(" + characterInfo.Job.Name + ")") : characterInfo.Name, null); string statusText = "OK"; Color statusColor = Color.DarkGreen; - if (character.IsDead) + Character character = characterInfo.Character; + if (character == null || character.IsDead) { - statusText = InfoTextManager.GetInfoText("CauseOfDeath." + character.CauseOfDeath.ToString()); + statusText = InfoTextManager.GetInfoText("CauseOfDeath." + characterInfo.CauseOfDeath.ToString()); statusColor = Color.DarkRed; } else diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 31d6fe929..c4c8e86bf 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -72,7 +72,16 @@ namespace Barotrauma private Item selectedConstruction; private Item[] selectedItems; - public byte TeamID = 0; + private byte teamID; + public byte TeamID + { + get { return teamID; } + set + { + teamID = value; + if (info != null) info.TeamID = value; + } + } public AnimController AnimController; @@ -1706,6 +1715,7 @@ namespace Barotrauma isDead = true; this.causeOfDeath = causeOfDeath; + if (info != null) info.CauseOfDeath = causeOfDeath; AnimController.movement = Vector2.Zero; AnimController.TargetMovement = Vector2.Zero; diff --git a/Barotrauma/BarotraumaShared/Source/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaShared/Source/Characters/CharacterInfo.cs index ce07c7a6d..dd6d8133f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/CharacterInfo.cs @@ -34,6 +34,10 @@ namespace Barotrauma public bool StartItemsGiven; + public CauseOfDeath CauseOfDeath; + + public byte TeamID; + public List PickedItemIDs { get { return pickedItems; } diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs index 0bc4643ab..e619386ee 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs @@ -232,17 +232,6 @@ namespace Barotrauma { if (Mission != null) Mission.End(); - if (GameMain.Server != null) - { - //CoroutineManager.StartCoroutine(GameMain.Server.EndGame(endMessage)); - - } - else if (GameMain.Client == null) - { - //Submarine.Unload(); - GameMain.LobbyScreen.Select(); - } - #if CLIENT if (roundSummary != null) {