public Enemy[] FindEnemies(State.Name[] states, Room.Names room, int floor)
    {
        // if there is only one element in the states array, run through everything once and return
        if (states.Length == 1)
        {
            State.Name state = states[0];
            return(_enemies.FindAll(enemy => enemy.stateManager.currentState.name == state && enemy.currentRoom == room && enemy.currentFloor == floor).ToArray());
        }

        // makea  list of enemies and add to it as you find applicable enemies
        List <Enemy> relevantEnemies = new List <Enemy>();

        for (int i = 0; i < states.Length; i++)
        {
            State.Name state = states[i];
            for (int j = 0; j < _enemies.Count; j++)
            {
                Enemy enemy = _enemies[j];
                if (enemy.stateManager.currentState.name == state && enemy.currentRoom == room && enemy.currentFloor == floor)
                {
                    relevantEnemies.Add(enemy);
                }
            }
        }
        return(relevantEnemies.ToArray());
    }
    // grabs the closest valid search node for an enemy
    public SearchNode GetMyNextNode(Enemy enemy, Room.Names room, int floor, InteractableEnvironment environment)
    {
        SearchNode closestNode = null;
        float      closestDist = Mathf.Infinity;

        if (SearchNode.allSearchNodes == null || SearchNode.allSearchNodes.Length == 0 || SearchNode.allSearchNodes.Contains(null))
        {
            SearchNode.FindAllSearchNodes();
            return(GetMyNextNode(enemy, room, floor, environment));
        }

        for (int i = 0; i < SearchNode.allSearchNodes.Length; i++)
        {
            if (SearchNode.allSearchNodes[i] == null)
            {
                continue;
            }
            if (SearchNode.allSearchNodes[i].roomName == room && SearchNode.allSearchNodes[i].floor == floor && SearchNode.allSearchNodes[i].environment == environment && SearchNode.allSearchNodes[i].IsSearchable())
            {
                float distToNode = Vector3.Distance(enemy.transform.position, SearchNode.allSearchNodes[i].transform.position);
                if (distToNode < closestDist)
                {
                    closestNode = SearchNode.allSearchNodes[i];
                    closestDist = distToNode;
                }
            }
        }

        return(closestNode);
    }
 // sets all search nodes back to an unsearched mode
 public void ResetSearchNodes(Room.Names room, int floor, InteractableEnvironment environment)
 {
     SearchNode[] nodesToReset = SearchNode.allSearchNodes.Where(searchNode => searchNode.roomName == room && searchNode.floor == floor && searchNode.environment == environment && !searchNode.IsSearchable()).ToArray();
     for (int i = 0; i < nodesToReset.Length; i++)
     {
         nodesToReset[i].HardReset();
     }
     _visitedSearchNodes.Clear();
 }
 // sets all search nodes back to an unsearched mode
 public void ResetSearchNodes(Room.Names room, int floor)
 {
     SearchNode[] nodesToReset = _visitedSearchNodes.FindAll(searchNode => searchNode.roomName == room && searchNode.floor == floor).ToArray();
     for (int i = 0; i < nodesToReset.Length; i++)
     {
         nodesToReset[i].SoftReset();
         if (nodesToReset[i].IsSearchable())
         {
             _visitedSearchNodes.Remove(nodesToReset[i]);
         }
     }
 }
Exemplo n.º 5
0
 // Override functions for Actor class
 public override void UpdateRoom(Room.Names oldRoom, Room.Names newRoom)
 {
     _previousRoom = oldRoom;
     _currentRoom  = newRoom;
 }