Exemplo n.º 1
0
    public override async Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        MapTile start = GetPlayerPosition(gameManager);
        int     map = start.Item1, minDistance = Int32.MaxValue;
        bool    targetFound = false;

        // TODO Sort players based on DistanceHeuristic first and loop through until the heuristic distance is more than the min actual distance.
        foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
        {
            if (player.IsPlayerMob())
            {
                MapTile goal           = GetPlayerPosition(gameManager, player);
                int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                if (simpleDistance < minDistance)
                {
                    LinkedList <MapTile> walkPath = null;
                    if (await pathManager.TryGetWalkPath(gameManager, start, goal, player, value => walkPath = value))
                    {
                        int distance = walkPath.Count;
                        if (distance < minDistance)
                        {
                            minDistance = distance;
                            state.SetTargetTile(goal);
                            state.SetTarget(player);
                            targetFound = true;
                        }
                    }
                }
            }
        }
        return(targetFound);
    }
Exemplo n.º 2
0
 protected override bool CanUseAction(GameManager gameManager, AutoControllerState state)
 {
     if (!gameManager.IsMainPlayerMoving())
     {
         MapTile start = GetPlayerPosition(gameManager);
         int     map   = start.Item1;
         foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
         {
             if (player.IsPlayerMob())
             {
                 MapTile goal           = GetPlayerPosition(gameManager, player);
                 int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                 if (simpleDistance <= 1)
                 {
                     m_target = goal;
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Exemplo n.º 3
0
    protected async Task WalkToTile(GameManager gameManager, PathManager pathManager, AutoControllerState state, MapTile start, MapTile goal, PlayerManager player, int distanceFromGoal = 0)
    {
        LinkedList <MapTile> walkPath = null;

        if (await pathManager.TryGetWalkPath(gameManager, start, goal, player, value => walkPath = value))
        {
            if (walkPath.Count > 1 && PathManager.DistanceHeuristic(start, goal) > distanceFromGoal)
            {
                MapTile nextTile  = walkPath.ElementAt(1);
                Vector3 direction = new Vector3(nextTile.Item2 - start.Item2, -(nextTile.Item3 - start.Item3), 0);
                gameManager.HandlePlayerPosition(direction, false);
                Vector3 previous = default(Vector3);
                foreach (MapTile tile in walkPath)
                {
                    Vector3 current = gameManager.WorldPosition(tile.Item2, tile.Item3, true) + Vector3.forward;
                    if (!previous.Equals(default(Vector3)))
                    {
                        Debug.DrawLine(previous, current, Color.red, 1f, false);
                    }
                    previous = current;
                }
            }
        }
    }
Exemplo n.º 4
0
 protected override bool CanUseAction(GameManager gameManager, AutoControllerState state)
 {
     m_target = null;
     if (!String.IsNullOrEmpty(m_type))
     {
         gameManager.GetMainPlayerHP(out int curHp, out int maxHp);
         gameManager.GetMainPlayerMP(out int curMp, out int maxMp);
         int hpPercent = GetPercent(curHp, maxHp);
         int mpPercent = GetPercent(curMp, maxMp);
         if (m_type.Equals("Healing"))
         {
             int targetPlayerId = 0;
             if (hpPercent < 90)
             {
                 targetPlayerId = gameManager.GetMainPlayerId();
             }
             else
             {
                 if (mpPercent > 20)
                 {
                     foreach (PartyPlayerUI partyPlayer in gameManager.GetAllPartyPlayers())
                     {
                         if (partyPlayer.GetHPBar() < 90)
                         {
                             targetPlayerId = partyPlayer.GetPlayerId();
                             break;
                         }
                     }
                 }
             }
             if (targetPlayerId > 0)
             {
                 m_playerId = targetPlayerId;
                 return(true);
             }
         }
         else if (m_type.Equals("Sacrifice"))
         {
             if (hpPercent > 50)
             {
                 int targetPlayerId = 0;
                 if (mpPercent < 50)
                 {
                     targetPlayerId = gameManager.GetMainPlayerId();
                 }
                 else
                 {
                     foreach (PartyPlayerUI partyPlayer in gameManager.GetAllPartyPlayers())
                     {
                         if (partyPlayer.GetMPBar() < 90)
                         {
                             targetPlayerId = partyPlayer.GetPlayerId();
                             break;
                         }
                     }
                 }
                 if (targetPlayerId > 0)
                 {
                     m_playerId = targetPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Regeneration"))
         {
             m_playerId = gameManager.GetMainPlayerId();
             return(true);
         }
         else if (m_type.Equals("Blast"))
         {
             if (mpPercent == 100)
             {
                 int     maxDistance = Int32.MinValue, maxPlayerId = 0;
                 bool    targetFound = false;
                 MapTile start       = GetPlayerPosition(gameManager);
                 foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                 {
                     if (player.IsPlayerMob())
                     {
                         MapTile goal           = GetPlayerPosition(gameManager, player);
                         int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                         if (maxDistance < simpleDistance)
                         {
                             maxDistance = simpleDistance;
                             maxPlayerId = player.GetPlayerId();
                             targetFound = true;
                         }
                     }
                 }
                 if (targetFound)
                 {
                     m_playerId = maxPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Assault"))
         {
             if (mpPercent > 90)
             {
                 int     maxDistance = Int32.MinValue, maxPlayerId = 0;
                 bool    targetFound = false;
                 MapTile start       = GetPlayerPosition(gameManager);
                 foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                 {
                     if (player.IsPlayerMob())
                     {
                         MapTile goal           = GetPlayerPosition(gameManager, player);
                         int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                         if (maxDistance < simpleDistance)
                         {
                             maxDistance = simpleDistance;
                             maxPlayerId = player.GetPlayerId();
                             targetFound = true;
                         }
                     }
                 }
                 if (targetFound)
                 {
                     m_playerId = maxPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Spirit Strike"))
         {
             if (!gameManager.IsMainPlayerMoving())
             {
                 if (hpPercent > 90)
                 {
                     m_playerId = gameManager.GetMainPlayerId();
                     MapTile start = GetPlayerPosition(gameManager);
                     foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                     {
                         if (player.IsPlayerMob())
                         {
                             MapTile goal           = GetPlayerPosition(gameManager, player);
                             int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                             if (simpleDistance <= 1)
                             {
                                 m_target = goal;
                                 return(true);
                             }
                         }
                     }
                 }
             }
         }
         else if (m_type.Equals("Critical Strike"))
         {
             if (!gameManager.IsMainPlayerMoving())
             {
                 if (hpPercent > 90)
                 {
                     m_playerId = gameManager.GetMainPlayerId();
                     MapTile start = GetPlayerPosition(gameManager);
                     foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                     {
                         if (player.IsPlayerMob())
                         {
                             MapTile goal           = GetPlayerPosition(gameManager, player);
                             int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                             if (simpleDistance <= 1)
                             {
                                 m_target = goal;
                                 return(true);
                             }
                         }
                     }
                 }
             }
         }
         else if (m_type.Equals("Covenant"))
         {
             if (hpPercent > 90 && mpPercent < 90)
             {
                 m_playerId = gameManager.GetMainPlayerId();
                 return(true);
             }
         }
     }
     return(false);
 }