private void Start() { // only allow odd numbers of subdivisions as this simplifies the maths if (StartingSubdivisionsPerQuad % 2 == 0) { StartingSubdivisionsPerQuad++; } _faces = new QuadFace[6]; _triangleCache = new QuadTriangleCache(StartingSubdivisionsPerQuad + 2); // create Front AddFace(QuadFaceType.ZPosFront, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); // create Left AddFace(QuadFaceType.XNegLeft, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); // create Right AddFace(QuadFaceType.XPosRight, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); // create Top AddFace(QuadFaceType.YPosTop, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); // create Bottom AddFace(QuadFaceType.YNegBottom, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); // create Back AddFace(QuadFaceType.ZNegBack, Radius * 2, Player, StartingSubdivisionsPerQuad, SubdivisionDistances, _triangleCache); Render(); }
private void AddFace(QuadFaceType type, float size, GameObject player, int startingSubdivisions, float[] subdivisionDistances, QuadTriangleCache cache) { string faceName = type.ToString(); var empty = new GameObject(faceName); empty.transform.parent = gameObject.transform; empty.layer = gameObject.layer; empty.transform.position = transform.position; empty.transform.rotation = transform.rotation; switch (type) { case QuadFaceType.YPosTop: empty.transform.Rotate(Vector3.left, 90); empty.transform.Rotate(Vector3.up, 180); break; case QuadFaceType.YNegBottom: empty.transform.Rotate(Vector3.right, 90); empty.transform.Rotate(Vector3.up, 180); break; case QuadFaceType.XNegLeft: empty.transform.Rotate(Vector3.up, 90); break; case QuadFaceType.XPosRight: empty.transform.Rotate(Vector3.down, 90); break; case QuadFaceType.ZPosFront: empty.transform.Rotate(Vector3.up, 180); break; } empty.transform.Translate(Vector3.back * (size / 2)); QuadFace face = empty.AddComponent <QuadFace>(); face.Root = this; face.FaceType = type; face.Size = size; face.Player = player; face.Subdivisions = startingSubdivisions; face.SubdivisionDistances = subdivisionDistances; face.TriangleCache = cache; face.StartingNoiseFrequency = StartingNoiseFrequency; face.StartingNoiseAmplitude = StartingNoiseAmplitude; face.SmoothNegativeElevations = SmoothNegativeElevations; face.Active = true; face.Initialise(); _faces[(int)type] = face; }