public void AttackOrder(Unit targetUnit) { this.targetUnit = targetUnit; currentOrder = AIManager.Order.Attack; }
public void executeOrders() { if (currentOrder == AIManager.Order.Idle) AIManager.TheAIManager.RequestOrder(owningUnit); if (currentOrder == AIManager.Order.Move) { Vector2 nextWaypointPosition = GameManager.TheGameManager.Map.TileCoordToPosition(nextWaypoint); if (Vector2.Distance(owningUnit.Position, nextWaypointPosition) < owningUnit.Speed * 2 && waypoints != null) { waypointStep++; if (waypointStep < waypoints.Count) { nextWaypoint = waypoints[waypointStep]; } else { waypoints = null; currentOrder = AIManager.Order.Idle; } } else { // FIXME - What if I'm on the position hmm? NaN party! owningUnit.FacingVector = Vector2.Normalize(nextWaypointPosition - owningUnit.Position); Vector2 point = owningUnit.Position + owningUnit.FacingVector * owningUnit.Speed; owningUnit.MoveTo(GameType.PointType.Position, point, true); } } if (currentOrder == AIManager.Order.Attack) { if (targetUnit != null) { if (targetUnit.isDead()) { targetUnit = null; currentOrder = AIManager.Order.Idle; return; } if (Vector2.Distance(owningUnit.Position, targetUnit.Position) > owningUnit.VisionRange) { // FIXME - This can be nicer! Vector2 closerPosition = GameManager.TheGameManager.Map.PositionToTileCoord(targetUnit.Position - owningUnit.Position) + GameManager.TheGameManager.Map.PositionToTileCoord(owningUnit.Position); MoveOrder(closerPosition); } else { owningUnit.Cast(0, targetUnit.Center); } } else { targetUnit = GameManager.TheGameManager.FindTarget(owningUnit); } } }
public void MoveOrder(Vector2 tileCoord) { waypoints = GameManager.TheGameManager.PathFinder.FindPath( GameManager.TheGameManager.Map.PositionToTileCoord(owningUnit.Position), tileCoord); if (waypoints != null) { currentOrder = AIManager.Order.Move; waypointStep = 0; nextWaypoint = waypoints[waypointStep]; } else { currentOrder = AIManager.Order.Idle; } }