Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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();
            }
        }