private void HandleCharacterPositionMessage(String address, AbstractMessage message) { CharacterPositionMessage characterPositionMessage = (CharacterPositionMessage)message; Player currentPlayer = controller.GetPlayer(IPAddress.Parse(address)); if (serverStatus != ServerStatus.WaitingCharacterPosition || currentPlayer.Ready) { return; } foreach (String characterName in characterPositionMessage.CharactersPosition.Keys) { currentPlayer.GetCharacter(characterName).MapLocation = characterPositionMessage.CharactersPosition[characterName]; } foreach (Player player in controller.GetPlayers()) { if (player.IPAddress != currentPlayer.IPAddress) { controller.Server.SendData(player.IPAddress, message); } } currentPlayer.Ready = true; bool ready = true; foreach (Player player in controller.GetPlayers()) { if (!player.Ready) { ready = false; } } if (ready) { StartBattleMessage startBattleMessage = new StartBattleMessage(); BattleEngine battleEngine = BattleEngine.GetInstance(); serverStatus = ServerStatus.Game; battleEngine.NextCharacterTurn(); startBattleMessage.Turn = new Turn(battleEngine.ActualCharacter.RootName, battleEngine.ActualPlayer, false); startBattleMessage.Affects = ConvertEffectsToArray(battleEngine.ProcessSpecialAbilities()); controller.Server.SendToAll(startBattleMessage); battleEngine.ClearAffects(); } }
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(); } }