Exemplo 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();
        }
Exemplo n.º 2
0
        private void SendConfirmUpdateMessage(ConfirmationType confirmationType)
        {
            ConfirmUpdateMessage message = new ConfirmUpdateMessage();

            message.ConfirmationType = confirmationType;
            Controller.GetInstance().Client.SendData(message);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
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();
            }
        }