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 HandleStartBattleMessage(String address, AbstractMessage message) { GameScreen gameScreen = GameScreen.GetInstance(); StartBattleMessage startBattleMessage = (StartBattleMessage)message; Turn actualTurn = startBattleMessage.Turn; controller.SupressUpdate(); gameScreen.ActualTurn = actualTurn; UpdateAffects(startBattleMessage.Affects); gameScreen.DoAffects(actualTurn); Character actualCharacter = controller.GetPlayer(actualTurn.PlayerName).GetCharacter(actualTurn.CharacterName); Camera.GetInstance().FocusOn(actualCharacter.MapLocation); gameScreen.MapCursor.MapLocation = Camera.GetInstance().CenterLocation; gameScreen.MapCursor.IsVisible = gameScreen.SelectedCharacter == null; gameScreen.Handlers.Peek().Watch(actualCharacter); gameScreen.Handlers.Peek().SetTrigger(Trigger.TriggerActionBox); controller.ReleaseUpdate(); }