Exemple #1
0
        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();
            }
        }
Exemple #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();
            }
        }