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]); } } }
// Override functions for Actor class public override void UpdateRoom(Room.Names oldRoom, Room.Names newRoom) { _previousRoom = oldRoom; _currentRoom = newRoom; }