protected bool IsBlockedOrder(UnitOrderMove order, List <UnitOrderMove> remainingOrders) { UnitInstanceData target = GetOrderTargetUnit(order); if (target != null) { return(true); } return(false); }
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)); } }
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); }
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); }
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; } }