Exemple #1
0
        protected bool IsBlockedOrder(UnitOrderMove order, List <UnitOrderMove> remainingOrders)
        {
            UnitInstanceData target = GetOrderTargetUnit(order);

            if (target != null)
            {
                return(true);
            }

            return(false);
        }
Exemple #2
0
        protected void ExecuteStopOrders(List <UnitAction> actions)
        {
            foreach (var stopOrder in new List <UnitOrder>(orders).FindAll(o => o is UnitOrderStop))
            {
                orders.Remove(stopOrder);
                UnitInstanceData unit = GetUnitInstanceData(stopOrder.unitInstanceId);
                if (unit == null)
                {
                    return;
                }

                unit.direction = MoveDirection.None;

                actions.Add(new UnitActionStop(stopOrder.unitInstanceId, timingOrder));
            }
        }
Exemple #3
0
        protected bool IsValidOrder(UnitOrderMove unitOrderMove)
        {
            UnitInstanceData unit = GetUnitInstanceData(unitOrderMove.unitInstanceId);

            if (unit == null)
            {
                return(false);
            }

            if (Math.Abs(unit.x - unitOrderMove.targetX) + Math.Abs(unit.y - unitOrderMove.targetY) == 1)
            {
                return(true);
            }

            return(false);
        }
Exemple #4
0
        protected bool IsConflictingOrder(UnitOrderMove order, List <UnitOrderMove> remainingOrders)
        {
            UnitInstanceData unit = GetUnitInstanceData(order.unitInstanceId);

            if (unit == null)
            {
                return(false);
            }
            UnitInstanceData target = GetOrderTargetUnit(order);

            if (target != null && target.playerId == unit.playerId)
            {
                return(true);
            }
            if (remainingOrders.Find(o => o != order && o.targetX == order.targetX && o.targetY == order.targetY) != null)
            {
                return(true);
            }

            return(false);
        }
Exemple #5
0
        protected void ExecuteOrder(UnitOrderMove order, List <UnitAction> actions)
        {
            UnitInstanceData unit = GetUnitInstanceData(order.unitInstanceId);

            if (unit == null)
            {
                return;
            }

            UnitInstanceData target = GetOrderTargetUnit(order);

            int xOffset = order.targetX - unit.x;
            int yOffset = order.targetY - unit.y;

            if (xOffset < 0)
            {
                unit.direction = MoveDirection.Left;
            }
            if (xOffset > 0)
            {
                unit.direction = MoveDirection.Right;
            }
            if (yOffset < 0)
            {
                unit.direction = MoveDirection.Up;
            }
            if (yOffset > 0)
            {
                unit.direction = MoveDirection.Down;
            }

            if (unit == null)
            {
                return;
            }

            if (target != null)
            {
                if (unit.playerId == target.playerId)
                {
                    return;
                }

                int killedMen = Math.Min(target.count, unit.attack);
                target.count -= killedMen;
                target.RecalculateAttack();

                actions.Add(new UnitActionAttack(unit.unitInstanceId, ++timingOrder, target.unitInstanceId, target.count, target.attack));


                if (target.count <= 0)
                {
                    actions.Add(new UnitActionDie(target.unitInstanceId, ++timingOrder));
                    battleData.unitsOnBoard.Remove(target);
                    return;
                }

                int retaliationKilledMen = Math.Min(unit.count, target.attack);
                unit.count -= retaliationKilledMen;
                unit.RecalculateAttack();

                actions.Add(new UnitActionRetaliate(target.unitInstanceId, ++timingOrder, unit.unitInstanceId, unit.count, unit.attack));

                if (unit.count <= 0)
                {
                    actions.Add(new UnitActionDie(unit.unitInstanceId, ++timingOrder));
                    battleData.unitsOnBoard.Remove(unit);
                }
            }
            else
            {
                actions.Add(new UnitActionMove(unit.unitInstanceId, ++timingOrder, unit.x, unit.y, order.targetX, order.targetY));

                unit.x = order.targetX;
                unit.y = order.targetY;
            }
        }