private void HandleAffectsMessage(String address, AbstractMessage message) { GameScreen gameScreen = GameScreen.GetInstance(); AffectsMessage affectsMessage = (AffectsMessage)message; controller.SupressUpdate(); UpdateAffects(affectsMessage.Affects); gameScreen.DoAffects(affectsMessage.Turn); if (affectsMessage.Turn == null) { ConfirmUpdateMessage confirmUpdateMessage = new ConfirmUpdateMessage(); confirmUpdateMessage.ConfirmationType = ConfirmationType.AffectsMessage; Controller.GetInstance().Client.SendData(confirmUpdateMessage); } else { Character actualCharacter = controller.GetPlayer(affectsMessage.Turn.PlayerName).GetCharacter( affectsMessage.Turn.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.SendConfirmAffects); } controller.ReleaseUpdate(); }
private void SendConfirmUpdateMessage(ConfirmationType confirmationType) { ConfirmUpdateMessage message = new ConfirmUpdateMessage(); message.ConfirmationType = confirmationType; Controller.GetInstance().Client.SendData(message); }
private void HandleUpdateMessage(String address, AbstractMessage message) { GameScreen gameScreen = GameScreen.GetInstance(); UpdateMessage updateMessage = (UpdateMessage)message; Player player = controller.GetPlayer(updateMessage.Action.PlayerName); Character character = null; if (updateMessage.Action is ActionMessageWalk) { ActionMessageWalk walkMessage = (ActionMessageWalk)updateMessage.Action; character = player.GetCharacter(walkMessage.Actor); controller.SupressUpdate(); gameScreen.MoveCharacter(character, walkMessage.Point); controller.ReleaseUpdate(); IInputHandler handler = gameScreen.Handlers.Peek(); handler.Watch(character); handler.SetTrigger(Trigger.SendConfirmUpdate); } else if (updateMessage.Action is ActionMessageAttack) { ActionMessageAttack attackMessage = (ActionMessageAttack)updateMessage.Action; character = player.GetCharacter(attackMessage.Actor); Player targetPlayer = controller.GetPlayer(attackMessage.TargetPlayer); Character target = targetPlayer.GetCharacter(attackMessage.Target); controller.SupressUpdate(); gameScreen.DoBattle(character, target, attackMessage.Damage, attackMessage.CounterAttack, attackMessage.CounterDamage); IInputHandler handler = gameScreen.Handlers.Peek(); handler.Watch(character); handler.Watch(target); handler.SetTrigger(Trigger.SendConfirmUpdate); controller.ReleaseUpdate(); } else if (updateMessage.Action is ActionMessageFinish) { gameScreen.ActualTurn = null; ConfirmUpdateMessage confirmUpdateMessage = new ConfirmUpdateMessage(); confirmUpdateMessage.ConfirmationType = ConfirmationType.UpdateMessage; Controller.GetInstance().Client.SendData(confirmUpdateMessage); } }
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(); } }