/// <summary> /// Finds closest marker to player position. /// </summary> /// <param name="closestMarkerOut">Closest marker of specified type to player if found.</param> /// <param name="type">Marker type.</param> /// <param name="playerPos">Player position.</param> /// <returns>True if successful.</returns> public bool FindClosestMarker(out Vector3 closestMarkerOut, InteriorMarkerTypes type, Vector3 playerPos) { bool foundOne = false; float minDistance = float.MaxValue; closestMarkerOut = Vector3.zero; for (int i = 0; i < markers.Count; i++) { // Exclude markers of incorrect type if (markers[i].type != type) { continue; } // Refine to closest marker float distance = Vector3.Distance(playerPos, markers[i].gameObject.transform.position); if (distance < minDistance || !foundOne) { closestMarkerOut = markers[i].gameObject.transform.position; minDistance = distance; foundOne = true; } } if (!foundOne) { closestMarkerOut = Vector3.zero; return(false); } return(true); }
/// <summary> /// Find all marker positions of a specific type. /// </summary> public Vector3[] FindMarkers(InteriorMarkerTypes type) { List <Vector3> markerResults = new List <Vector3>(); for (int i = 0; i < markers.Count; i++) { if (markers[i].type == type) { markerResults.Add(markers[i].gameObject.transform.position); } } return(markerResults.ToArray()); }
/// <summary> /// Find a specific marker. Will stop searching at first item found. /// </summary> /// <returns>True if at least one marker found.</returns> public bool FindMarker(out Vector3 markerOut, InteriorMarkerTypes type) { markerOut = Vector3.zero; for (int i = 0; i < markers.Count; i++) { if (markers[i].type == type) { markerOut = markers[i].gameObject.transform.position; return(true); } } return(false); }
/// <summary> /// Find a specific marker. Will stop searching at first item found, or at a random-ish marker if random=true. /// </summary> /// <returns>True if at least one marker found.</returns> public bool FindMarker(out Vector3 markerOut, InteriorMarkerTypes type, bool random = false) { markerOut = Vector3.zero; for (int i = 0; i < markers.Count; i++) { if (markers[i].type == type) { markerOut = markers[i].gameObject.transform.position; if (!random || UnityEngine.Random.Range(0, 2) == 0) { return(true); } } } return(!(markerOut == Vector3.zero)); }