void CheckPerimeter() { if (!perimeter.upToDate) { perimeter.upToDate = ResetPerimeter(); } // determine enemy heading range etc i.e disposition List <GameObject> bogieGOs = new List <GameObject>(bogies.Count); for (int i = 0; i < bogies.Count; i++) { bogieGOs[i] = bogies[i].bogieObject; } NTools.Slice enemyDisposition = NTools.AnalyseGroupDisposition( perimeter.center, perimeter.headingFloat, bogieGOs ); // Adjust perimeter heading based on enemy positions center of weight // Determine green and nongreen population of sectors // Compare population to sector importance, compute importanceMet value // if needed, add problem of type perimeter // if there exists a problem with said sector, but is not relevant anymore, remove problem }
void CheckPerimeter() { if (!perimeter.upToDate) { perimeter.upToDate = ReassignSectorPriorities(); if (!perimeter.upToDate) { Debug.Log("Reassigning sector priorities failed."); } } List <GameObject> bogieGOs = new List <GameObject>(bogies.Capacity); NTools.Disposition enemyDisposition; // determine enemy heading range etc i.e disposition if (bogies.Count != 0) { for (int i = 0; i < bogies.Count; i++) { if (bogies[i].bogieObject != null) { bogieGOs.Add(bogies[i].bogieObject); } } enemyDisposition = NTools.AnalyseGroupDisposition( perimeter.center, perimeter.headingFloat, bogieGOs ); enemyGeneralPosition = enemyDisposition.centerOfMass; } else { enemyGeneralPosition = new Vector3(0f, 0f, 0f); } //TODO Optimize - determines perimeter anchor, heading2D and headingFloat. Is gud. if (objective.objectiveSet) { // If this happens, the game is lost or won, which will be caught by CheckObjective method if (!objective.objectiveObject) { return; } if (objective.objectiveIsFriendly) { perimeter.perimeterAnchor = objective.objectiveObject; perimeter.heading2D = new Vector2( enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x, enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y ); perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D); } else if (!objective.objectiveIsFriendly) { perimeter.perimeterAnchor = DeterminePerimeterAnchor(); if (perimeter.perimeterAnchor != null) { perimeter.heading2D = new Vector2( enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x, enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y ); perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D); } else { missionState = MissionState.lost; } } } else { perimeter.perimeterAnchor = DeterminePerimeterAnchor(); if (perimeter.perimeterAnchor != null) { perimeter.heading2D = new Vector2( enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x, enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y ); perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D); } else { missionState = MissionState.lost; } } }