Example #1
0
    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();
    }
Example #2
0
    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;
    }