private void HandleConfirmUpdateMessage(String address, AbstractMessage message) { ConfirmUpdateMessage confirmUpdateMessage = (ConfirmUpdateMessage)message; Player currentPlayer = controller.GetPlayer(IPAddress.Parse(address)); BattleEngine battleEngine = BattleEngine.GetInstance(); if (serverStatus != ServerStatus.Game || currentPlayer.Ready) { return; } currentPlayer.Ready = true; bool ready = true; foreach (Player player in controller.GetPlayers()) { if (!player.Ready) { ready = false; break; } } if (ready) { AbstractMessage returnMessage = null; if (confirmUpdateMessage.ConfirmationType == ConfirmationType.UpdateMessage) { if (battleEngine.LastAction == LastAction.Walked) { returnMessage = new AffectsMessage(); ((AffectsMessage)returnMessage).Affects = ConvertEffectsToArray(battleEngine.ProcessSpecialAbilities()); foreach (Player player in controller.GetPlayers()) { player.Ready = false; } } else if (battleEngine.LastAction == LastAction.Attacked || battleEngine.LastAction == LastAction.Passed) { if (battleEngine.IsGameOver()) { returnMessage = CreateEndGameMessage(); } else { battleEngine.FinalizeCharacterTurn(); battleEngine.NextCharacterTurn(); returnMessage = new AffectsMessage(); ((AffectsMessage)returnMessage).Affects = ConvertEffectsToArray(battleEngine.ProcessSpecialAbilities()); ((AffectsMessage)returnMessage).Turn = new Turn(battleEngine.ActualCharacter.RootName, battleEngine.ActualPlayer, battleEngine.ActualCharacterHasWalked); foreach (Player player in controller.GetPlayers()) { player.Ready = false; } } } } else if (confirmUpdateMessage.ConfirmationType == ConfirmationType.AffectsMessage) { if (battleEngine.ActualCharacter.Health.IsDead) { if (battleEngine.IsGameOver()) { returnMessage = CreateEndGameMessage(); } else { returnMessage = new AffectsMessage(); battleEngine.FinalizeCharacterTurn(); battleEngine.NextCharacterTurn(); ((AffectsMessage)returnMessage).Affects = ConvertEffectsToArray(battleEngine.ProcessSpecialAbilities()); ((AffectsMessage)returnMessage).Turn = new Turn(battleEngine.ActualCharacter.RootName, battleEngine.ActualPlayer, battleEngine.ActualCharacterHasWalked); foreach (Player player in controller.GetPlayers()) { player.Ready = false; } } } else { returnMessage = new TurnMessage(); ((TurnMessage)returnMessage).Turn = new Turn(battleEngine.ActualCharacter.RootName, battleEngine.ActualPlayer, battleEngine.ActualCharacterHasWalked); } } controller.Server.SendToAll(returnMessage); battleEngine.ClearAffects(); } }