public void RecalculateWorldPoints(TectonicPlate plate) { //foreach (TectonicPlate plate in Plates) { List <TectonicPoint> badPoints = new List <TectonicPoint>(); foreach (TectonicPoint point in plate.Points.Values) { WorldPoint wp = plate.TectonicPointToWorldPoint(point); if (wp != null) { bool continueAfter = true; if (wp.TecPoint != null) { //one plate subducts TectonicPoint otherPlatePoint = wp.TecPoint; if (otherPlatePoint.age > point.age) { //the other plate is older and more dense, and that one subducts otherPlatePoint.plate.Points.Remove(otherPlatePoint.Pos); List <TectonicPoint> neighbors = otherPlatePoint.plate.GetNeighbors(otherPlatePoint); foreach (TectonicPoint n in neighbors) { otherPlatePoint.plate.SubductionForce += n.Pos - otherPlatePoint.Pos; } } else { //this plate is older and more dense, this one subducts badPoints.Add(point); continueAfter = false; List <TectonicPoint> neighbors = plate.GetNeighbors(point); foreach (TectonicPoint n in neighbors) { plate.SubductionForce += n.Pos - point.Pos; } } } if (continueAfter) { wp.TecPoint = point; } } } foreach (TectonicPoint badPoint in badPoints) { plate.Points.Remove(badPoint.Pos); } } foreach (TectonicPoint point in plate.Points.Values) { WorldPoint wp = plate.TectonicPointToWorldPoint(point); if (wp != null) { wp.go.GetComponent <MeshRenderer>().material.color = point.plate.c; } } plate.WorldPointCenter.go.GetComponent <MeshRenderer>().material.color = Color.black; }
public void AddToVoids() { foreach (WorldPoint wp in WorldPoints.Values.Where(p => p.TecPoint == null)) { if (wp.OldTectonicPoint == null) { continue; } TectonicPlate tp = wp.OldTectonicPoint.plate; TectonicPoint createdTecPoint = new TectonicPoint(wp.Pos - tp.WorldPointCenter.Pos, -age, tp); wp.TecPoint = createdTecPoint; tp.Points.Add(createdTecPoint.Pos, createdTecPoint); wp.go.GetComponent <MeshRenderer>().material.color = tp.c; } }
public List <TectonicPoint> GetNeighbors(TectonicPoint point) { List <TectonicPoint> Neighbors = new List <TectonicPoint>(); for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { if (x == 0 && y == 0) { continue; } if (Points.ContainsKey(new Vector2(x + point.Pos.x, y + point.Pos.y))) { Neighbors.Add(Points[new Vector2(x + point.Pos.x, y + point.Pos.y)]); } } } return(Neighbors); }
public WorldPoint TectonicPointToWorldPoint(TectonicPoint point) { Vector2 mod = Vector2.zero; if (point.Pos.x + WorldPointCenter.Pos.x > 99) { mod = new Vector2(-100, 0); } if (point.Pos.x + WorldPointCenter.Pos.x < 0) { mod = new Vector2(100, 0); } if (point.Pos.y + WorldPointCenter.Pos.y >= 100) { return(null); } if (point.Pos.y + WorldPointCenter.Pos.y < 0) { return(null); } return(Sim.WorldPoints[point.Pos + WorldPointCenter.Pos + mod]); }