private Transform Spawn(double3 localPoint, double3 localH, double3 localV, double weight) { var index = (int)math.floor(weight * 433494437.0) % prefabs.Count; var root = Instantiate(prefabs[index]); var sampledPoint = cachedTerrain.GetLocalPoint(localPoint); root.SetParent(cachedTerrain.transform, false); root.localPosition = (float3)sampledPoint; if (sharedMaterial != null) { foreach (var renderer in root.GetComponentsInChildren <Renderer>()) { SgtHelper.AddMaterial(renderer, sharedMaterial.Material); } } switch (rotate) { case RotateType.Randomly: { var x = (float)((weight * 1224133.0) % 1787.0); var y = (float)((weight * 1324039.0) % 1597.0); var z = (float)((weight * 1424041.0) % 1321.0); root.rotation = quaternion.Euler(x, y, z); } break; case RotateType.ToSurfaceNormal: { var sampledPointL = cachedTerrain.GetLocalPoint(localPoint - localH); var sampledPointR = cachedTerrain.GetLocalPoint(localPoint + localH); var sampledPointB = cachedTerrain.GetLocalPoint(localPoint - localV); var sampledPointF = cachedTerrain.GetLocalPoint(localPoint + localV); var vectorA = sampledPointR - sampledPointL; var vectorB = sampledPointF - sampledPointB; var normal = math.normalize(-math.cross(vectorA, vectorB)); var angle = (float)((weight * 1224133.0) % 1597.0); root.up = cachedTerrain.TransformVector(normal); root.Rotate(0.0f, angle, 0.0f, Space.Self); } break; case RotateType.ToPlanetCenter: { var normal = math.normalize(sampledPoint); var angle = (float)((weight * 1224133.0) % 1597.0); root.up = cachedTerrain.TransformVector(normal); root.Rotate(0.0f, angle, 0.0f, Space.Self); } break; } return(root); }
public void ApplyMaterial() { if (Renderers != null) { for (var i = Renderers.Count - 1; i >= 0; i--) { SgtHelper.AddMaterial(Renderers[i], material); } } }
public void AddRenderer(MeshRenderer renderer) { if (renderer != null) { if (Renderers == null) { Renderers = new List <MeshRenderer>(); } if (Renderers.Contains(renderer) == false) { Renderers.Add(renderer); SgtHelper.AddMaterial(renderer, material); } } }