private MiniCentroid GetClosestCentroid(MiniCentroid c) { float closest = 10000; MiniCentroid closestCentroid = first; for (int i = 0; i < miniCentroid.Count; i++) { MiniCentroid toCheck = miniCentroid[i]; if (toCheck == c) { continue; } if (InMapped(toCheck)) { continue; } float distance = Vector3.Distance(c.position, toCheck.position); if (distance < closest) { closest = distance; closestCentroid = toCheck; } } return(closestCentroid); }
public void FilterMiniCentroids() { for (int i = 0; i < points.Count; i++) { points[i].FilterPoint(); } for (int i = 0; i < miniCentroid.Count; i++) { MiniCentroid current = miniCentroid[i]; MiniCentroid closest = GetClosestMiniCentroid(current); if (closest == null) { continue; } float distance = Vector3.Distance(current.position, closest.position); if (distance > .55f) { GameObject obj = current.transform.gameObject; for (int ia = 0; ia < current.points.Count; ia++) { current.points[ia].Hide(); } miniCentroid[i].Refresh(); miniCentroid.Remove(current); Destroy(obj); } } }
private bool InMapped(MiniCentroid c) { for (int i = 0; i < mapped.Count; i++) { if (mapped[i] == c) { return(true); } } return(false); }
private void CreateMiniCentroid() { for (int i = 0; i < miniCentroidCount; i++) { GameObject clone = Instantiate(cluster.miniCentroid) as GameObject; clone.transform.SetParent(transform); clone.transform.position = transform.position; MiniCentroid mini = clone.GetComponent <MiniCentroid>(); mini.SetMainCentroid(this); miniCentroid.Add(mini); } path = new PathGeneration(miniCentroid); }
public void Merge(MiniCentroid mini) { if (this == mini) { return; } for (int i = 0; i < mini.points.Count; i++) { points.Add(mini.points[i]); //mini.points[i].Hide(); } mainCentroid.miniCentroid.Remove(mini); Destroy(mini.transform.gameObject); }
private MiniCentroid GetStarterCentroid() { MiniCentroid c = null; float z = 10000; for (int i = 0; i < miniCentroid.Count; i++) { MiniCentroid toCheck = miniCentroid[i]; if (toCheck.position.z < z) { z = toCheck.position.z; c = toCheck; } } if (c == null) { c = miniCentroid[Random.Range(0, miniCentroid.Count)]; } return(c); }
public MiniCentroid GetClosestMiniCentroid(ClusterPoint cp) { MiniCentroid c; closest = null; if (cp.miniCentroid == null) { cp.SetMiniCentroid(this); } distanceMagnitude = Vector3.SqrMagnitude(cp.position - cp.miniCentroid.position); for (int i = 0; i < mainCentroid.miniCentroid.Count; i++) { c = mainCentroid.miniCentroid[i]; magnitude = Vector3.SqrMagnitude(cp.position - c.position); if (magnitude < distanceMagnitude) { closest = c; distanceMagnitude = magnitude; } } return(closest); }
public void GenerateMesh() { List <Vector2> points = new List <Vector2>(); for (int i = 0; i < centroids.Count; i++) { Centroid currentCentroid = centroids[i]; for (int j = 0; j < currentCentroid.miniCentroid.Count; j++) { MiniCentroid mini = currentCentroid.miniCentroid[j]; List <Vector2> active = mini.GetActivePoints(); for (int k = 0; k < active.Count; k++) { points.Add(active[k]); } } } FindObjectOfType <Navigation.Grid>().DisplayNavmesh(points); }
public void CalculatePoint() { ClusterPoint cp; for (int i = 0; i < points.Count; i++) { cp = points[i]; closest = GetClosestMiniCentroid(cp); if (closest == null) { continue; } cp.miniCentroid.points.Remove(cp); closest.points.Add(cp); cp.SetMiniCentroid(closest); } CalculateCenter(); }
public void GeneratePath(Color c) { for (int i = 0; i < miniCentroid.Count; i++) { if (next == null) { next = GetStarterCentroid(); first = next; } MiniCentroid closest = GetClosestCentroid(next); if (!InMapped(closest)) { DrawPath(closest.position, c); mapped.Add(next); next = closest; } else { DrawPath(first.position, c); } } }
public void SetMiniCentroid(MiniCentroid c) { this.miniCentroid = c; //sr.color = c.random; distanceFromMini = Vector3.Distance(position, miniCentroid.position); }