// Füllt die Liste mit allen Feldern, die der Roboter sehen kann private void GetRealFieldOfView(Robot robot, List<Transform> InRealView) { for (int i = 0; i < Map.childCount; i++) { // Gehe alle Zellen der Karte durch und überprüfe, ob sie im Sichtbereich des Roboters liegen (ohne Schatten/Sichtblockaden) if (robot.InViewField(Map.GetChild(i))) { // Gehe alle Zellen im Sichtradius durch und überprüfe, ob sie Verdeckt sind/im Schatten einer Wand liegen if (robot.IsInSight(Map.GetChild(i))) { InRealView.Add(Map.GetChild(i)); } } } }
// Gibt die Zellen zurück, die am Rand des Sichtfelds liegen private void getFrontierCells(Robot robot, List<Transform> inRealView, List<Transform> fronterCells) { List<Transform> neig = new List<Transform>(); foreach (Transform t in inRealView) { getAllNeighbours(t, neig); foreach (Transform tt in neig) { if (!robot.InViewField(tt) || !robot.IsInSight(tt) && (robot.InViewField(tt) && !tt.GetComponent<Cell>().isWall)) { if (!t.GetComponent<Cell>().isClosed) { fronterCells.Add(t); } break; } } neig.Clear(); } }