예제 #1
0
        void OnAttackUnit(ClientToServerMessage message)
        {
            AttackUnitRequest request = message.AttackUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid attack unit request");
            }
            Unit attacker = PlayerState.GetUnit(request.AttackerUnitId);

            if (attacker == null)
            {
                throw new ServerClientException("Encountered an invalid attacking unit ID in an attack request");
            }
            Unit defender = Opponent.PlayerState.GetUnit(request.DefenderUnitId);

            if (defender == null)
            {
                throw new ServerClientException("Encountered an invalid target unit ID in an attack request");
            }
            PlayerState.AttackUnit(attacker, defender);
            UnitCasualties        attackerCasualties = new UnitCasualties(attacker.Id, attacker.Strength);
            UnitCasualties        defenderCasualties = new UnitCasualties(defender.Id, defender.Strength);
            UnitCombatBroadcast   casualties         = new UnitCombatBroadcast(attackerCasualties, defenderCasualties);
            ServerToClientMessage broadcast          = new ServerToClientMessage(casualties);

            BroadcastMessage(broadcast);
            AnnihilationCheck();
        }
예제 #2
0
        void OnMoveUnit(ClientToServerMessage message)
        {
            MoveUnitRequest request = message.MoveUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid move unit request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a move request");
            }
            int        movementPointsLeft;
            List <Hex> captures;

            PlayerState.MoveUnit(unit, request.NewPosition, out movementPointsLeft, out captures);
            UnitMoveBroadcast move = new UnitMoveBroadcast(unit.Id, movementPointsLeft);

            foreach (var hex in captures)
            {
                move.Captures.Add(hex.Position);
            }
            ServerToClientMessage broadcast = new ServerToClientMessage(move);

            BroadcastMessage(broadcast);
        }
예제 #3
0
        void OnInitialDeployment(ClientToServerMessage message)
        {
            Map map = Game.Map;
            InitialDeploymentRequest deployment = message.InitialDeploymentSubmission;

            if (deployment == null)
            {
                throw new ServerClientException("Invalid initial deployment");
            }
            // Reset the deployment state/position of all units to enable players to re-submit their initial deployment
            PlayerState.ResetUnitDeploymentState();
            foreach (var unitPosition in deployment.Units)
            {
                Unit unit = PlayerState.GetUnit(unitPosition.UnitId);
                if (unit == null)
                {
                    throw new ServerClientException("Encountered an invalid unit ID in the initial deployment");
                }
                PlayerState.InitialUnitDeployment(unit, unitPosition.Position);
            }
            _RequestedFirstTurn = deployment.RequestedFirstTurn;
            PlayerState.State   = PlayerStateType.HasDeployedUnits;
            if (Opponent.HasDeployed())
            {
                // The opponent has already submitted their deployment
                // Both players are ready, start the game
                Game.StartGame();
            }
        }
예제 #4
0
        void OnDeployUnit(ClientToServerMessage message)
        {
            UnitDeployment deployment = message.UnitDeployment;

            if (deployment == null)
            {
                throw new ServerClientException("Invalid unit deployment");
            }
            Unit unit = PlayerState.GetUnit(deployment.Unit.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a deployment request");
            }
            PlayerState.DeployUnit(unit, deployment.Unit.Position);
            ServerToClientMessage broadcast = new ServerToClientMessage(deployment);

            BroadcastMessage(broadcast);
        }
예제 #5
0
        void OnEntrenchUnit(ClientToServerMessage message)
        {
            UnitEntrenched entrenchUnit = message.EntrenchUnit;

            if (entrenchUnit == null)
            {
                throw new ServerClientException("Invalid entrench unit request");
            }
            Unit unit = PlayerState.GetUnit(entrenchUnit.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a move request");
            }
            PlayerState.EntrenchUnit(unit);
            ServerToClientMessage broadcast = new ServerToClientMessage(entrenchUnit);

            BroadcastMessage(broadcast);
        }
예제 #6
0
        void OnUpgradeUnit(ClientToServerMessage message)
        {
            UpgradeUnitRequest request = message.UpgradeUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid upgrade unit request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in an upgrade request");
            }
            PlayerState.UpgradeUnit(unit, unit.GetUpgrade(request.UpgradeId));
            UnitUpgradedBroadcast unitUpgraded = new UnitUpgradedBroadcast(new ReinforcementState(PlayerState), unit.Id);
            ServerToClientMessage broadcast    = new ServerToClientMessage(unitUpgraded);

            BroadcastMessage(broadcast);
        }
예제 #7
0
        void OnReinforceUnit(ClientToServerMessage message)
        {
            ReinforceUnitRequest request = message.ReinforceUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid unit reinforcement request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a reinforcement request");
            }
            PlayerState.ReinforceUnit(unit);
            UnitReinforcementBroadcast unitReinforced = new UnitReinforcementBroadcast(new ReinforcementState(PlayerState), unit.Id, unit.Strength);
            ServerToClientMessage      broadcast      = new ServerToClientMessage(unitReinforced);

            BroadcastMessage(broadcast);
        }