예제 #1
0
        public void AttackOrder(Unit targetUnit)
        {
            this.targetUnit = targetUnit;

            currentOrder = AIManager.Order.Attack;
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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;
            }
        }