예제 #1
0
        public static MeshDraft Back1(Vector3 center, float width, float length, float height)
        {
            var   draft       = new MeshDraft();
            int   plankCount  = Random.Range(1, 5);
            float plankStep   = height / plankCount;
            float plankHeight = plankStep * Random.Range(0.3f, 0.8f);
            float plankWidth  = width - length * 2;

            float offeset = 0;

            if (plankCount > 1)
            {
                offeset = RandomE.Range(0, (plankStep - plankHeight) / 2, 3);
            }
            Vector3 startPosition = Vector3.up * (-height / 2 + plankStep - plankHeight / 2 - offeset);

            for (int i = 0; i < plankCount; i++)
            {
                var plank = MeshDraft.Hexahedron(plankWidth, length, plankHeight);
                plank.Move(startPosition + Vector3.up * i * plankStep);
                draft.Add(plank);
            }
            var rod = MeshDraft.Hexahedron(length, length, height);

            rod.Move(Vector3.left * (width / 2 - length / 2));
            draft.Add(rod);
            rod.Move(Vector3.right * (width - length));
            draft.Add(rod);
            draft.Move(center + Vector3.up * height / 2);
            return(draft);
        }
        public static MeshDraft Armrests0(float seatWidth, float seatDepth, Vector3 backCenter, float backHeight,
                                          float legWidth)
        {
            var   draft         = new MeshDraft();
            float armrestHeight = RandomE.Range(backHeight / 4, backHeight * 3 / 4, 3);
            float armrestLength = seatDepth - legWidth;

            Vector3 corner = backCenter + Vector3.left * (seatWidth / 2 - legWidth / 2) + Vector3.back * legWidth / 2;

            float offset = 0;

            if (RandomE.Chance(0.5f))
            {
                offset = RandomE.Range(legWidth / 2, legWidth, 2);
            }
            Vector3 v0 = corner + Vector3.back * (armrestLength - legWidth / 2);
            Vector3 v1 = v0 + Vector3.up * (armrestHeight - legWidth / 2);
            Vector3 v2 = corner + Vector3.up * armrestHeight;
            Vector3 v3 = v2 + Vector3.back * (armrestLength + offset);

            var armrest = ChairGenerator.BeamDraft(v0, v1, legWidth);

            armrest.Add(ChairGenerator.BeamDraft(v2, v3, legWidth));
            draft.Add(armrest);
            armrest.Move(Vector3.right * (seatWidth - legWidth));
            draft.Add(armrest);
            return(draft);
        }
예제 #3
0
        public static MeshDraft RodBack(Vector3 center, float width, float length, float height)
        {
            var   draft          = new MeshDraft();
            int   rodCount       = Random.Range(1, 5);
            float maxWidth       = (width - length * 2) / rodCount;
            float rodWidth       = RandomE.Range(maxWidth / 4, maxWidth * 3 / 4, 3);
            float interval       = (width - length * 2 - rodWidth * rodCount) / (rodCount + 1);
            float upperRodHeight = Mathf.Min(height * 3 / 4, length * Random.Range(1, 4));
            float rodHeight      = height - upperRodHeight;

            var leftRod = MeshDraft.Hexahedron(length, length, rodHeight);

            leftRod.Move(Vector3.left * (width - length) / 2 + Vector3.down * upperRodHeight / 2);
            draft.Add(leftRod);
            leftRod.Move(Vector3.right * (width - length));
            draft.Add(leftRod);

            Vector3 startPosition = Vector3.left * (width / 2 - length - interval - rodWidth / 2) +
                                    Vector3.down * upperRodHeight / 2;

            for (int i = 0; i < rodCount; i++)
            {
                var rod = MeshDraft.Hexahedron(rodWidth, length, rodHeight);
                rod.Move(startPosition + Vector3.right * i * (rodWidth + interval));
                draft.Add(rod);
            }
            var upperRod = MeshDraft.Hexahedron(width, length, upperRodHeight);

            upperRod.Move(Vector3.up * rodHeight / 2);
            draft.Add(upperRod);
            draft.Move(center + Vector3.up * height / 2);
            return(draft);
        }
예제 #4
0
        private void Generate()
        {
            var draft = ChairGenerator.Chair(legWidth, legHeight, RandomE.Range(seatLB, seatUB), backHeight,
                                             hasStretchers, hasArmrests);

            meshFilter.mesh = draft.ToMesh();
        }
        private MeshDraft Armrests1(Vector3 seatDimensions, Vector3 backCenter, float backHeight, float legWidth)
        {
            var   draft         = new MeshDraft();
            float armrestHeight = RandomE.Range(backHeight / 4, backHeight * 3 / 4, 3);
            float armrestLength = RandomE.Range(seatDimensions.z * 3 / 4, seatDimensions.z, 2);

            legWidth = RandomE.Range(legWidth * 3 / 4, legWidth, 2);

            var corner = backCenter + Vector3.left * (seatDimensions.x / 2 + legWidth / 2) +
                         Vector3.forward * legWidth / 2;

            float offset = 0;

            if (RandomE.Chance(0.5f))
            {
                offset = RandomE.Range(armrestLength / 4, armrestLength / 2, 2) - legWidth / 2;
            }
            var v0 = corner + Vector3.back * (armrestLength - legWidth / 2 - offset) + Vector3.down * legWidth;
            var v1 = v0 + Vector3.up * (armrestHeight + legWidth / 2);
            var v2 = corner + Vector3.up * armrestHeight;
            var v3 = v2 + Vector3.back * armrestLength;

            var armrest = BeamDraft(v0, v1, legWidth);

            armrest.Add(BeamDraft(v2, v3, legWidth));
            draft.Add(armrest);
            armrest.Move(Vector3.right * (seatDimensions.x + legWidth));
            draft.Add(armrest);
            return(draft);
        }
예제 #6
0
        public static MeshDraft XStretchers(Vector3[] legCenters, float legWidth, float legHeight)
        {
            var draft = new MeshDraft();

            legWidth = RandomE.Range(legWidth / 2, legWidth * 3 / 4, 2);
            draft.Add(ChairGenerator.BeamDraft(legCenters[0], legCenters[2], legWidth));
            draft.Add(ChairGenerator.BeamDraft(legCenters[1], legCenters[3], legWidth));
            draft.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight / 2, 2));
            return(draft);
        }
예제 #7
0
        public static MeshDraft HStretchers(Vector3[] legCenters, float legWidth, float legHeight)
        {
            var draft = new MeshDraft();

            legWidth = RandomE.Range(legWidth / 2, legWidth, 3);
            draft.Add(ChairGenerator.BeamDraft(legCenters[0], legCenters[3], legWidth));
            draft.Add(ChairGenerator.BeamDraft(legCenters[1], legCenters[2], legWidth));
            Vector3 leftCenter  = (legCenters[3] + legCenters[0]) / 2;
            Vector3 rightCenter = (legCenters[2] + legCenters[1]) / 2;

            draft.Add(ChairGenerator.BeamDraft(leftCenter, rightCenter, legWidth));
            draft.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            return(draft);
        }
        private MeshDraft HStretchers(Vector3[] legCenters, float legWidth, float legHeight)
        {
            var draft = new MeshDraft();

            legWidth = RandomE.Range(legWidth / 2, legWidth, 3);
            draft.Add(BeamDraft(legCenters[0], legCenters[3], legWidth));
            draft.Add(BeamDraft(legCenters[1], legCenters[2], legWidth));
            var leftCenter  = (legCenters[3] + legCenters[0]) / 2;
            var rightCenter = (legCenters[2] + legCenters[1]) / 2;

            draft.Add(BeamDraft(leftCenter, rightCenter, legWidth));
            draft.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            return(draft);
        }
예제 #9
0
        public static MeshDraft BoxStretchers(Vector3[] legCenters, float legWidth, float legHeight)
        {
            var draft = new MeshDraft();

            legWidth = RandomE.Range(legWidth / 2, legWidth, 3);
            MeshDraft stretcher0 = ChairGenerator.BeamDraft(legCenters[0], legCenters[1], legWidth);

            stretcher0.Add(ChairGenerator.BeamDraft(legCenters[2], legCenters[3], legWidth));
            stretcher0.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            MeshDraft stretcher1 = ChairGenerator.BeamDraft(legCenters[0], legCenters[3], legWidth);

            stretcher1.Add(ChairGenerator.BeamDraft(legCenters[1], legCenters[2], legWidth));
            stretcher1.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            draft.Add(stretcher0);
            draft.Add(stretcher1);
            return(draft);
        }
        private MeshDraft BoxStretchers(Vector3[] legCenters, float legWidth, float legHeight)
        {
            var draft = new MeshDraft();

            legWidth = RandomE.Range(legWidth / 2, legWidth, 3);
            var stretcher0 = BeamDraft(legCenters[0], legCenters[1], legWidth);

            stretcher0.Add(BeamDraft(legCenters[2], legCenters[3], legWidth));
            stretcher0.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            var stretcher1 = BeamDraft(legCenters[0], legCenters[3], legWidth);

            stretcher1.Add(BeamDraft(legCenters[1], legCenters[2], legWidth));
            stretcher1.Move(Vector3.up * RandomE.Range(legHeight / 4, legHeight * 3 / 4, 3));
            draft.Add(stretcher0);
            draft.Add(stretcher1);
            return(draft);
        }
예제 #11
0
        private void GenerateLevel()
        {
            // Destroy existing bricks
            foreach (var brick in bricks)
            {
                Object.Destroy(brick);
            }
            bricks.Clear();

            var gradient = RandomE.gradientHSV;

            for (int y = 0; y < wallHeight; y++)
            {
                // Select color for current line
                var lineColor = gradient.Evaluate(y / (wallHeight - 1f));
                // Generate brick sizes for current line
                List <BrickSize> brickSizes = BrickSizes(wallWidth);

                float x             = 0f;
                var   previousColor = lineColor;
                for (int i = 0; i < brickSizes.Count; i++)
                {
                    // Randomize tint of current brick
                    var color = lineColor;
                    while (previousColor == color)
                    {
                        color -= Color.white * RandomE.Range(-0.2f, 0.2f, 3);
                    }
                    previousColor = color;

                    var brickSize = brickSizes[i];
                    if (i >= 0)
                    {
                        x += sizeValues[brickSize] / 2;
                    }

                    Vector3 position = Vector3.right * (x - wallWidth / 2f) + Vector3.up * (wallHeightOffset + y / 2f);
                    bricks.Add(GenerateBrick(position, color, brickSize));
                    x += sizeValues[brickSize] / 2;
                }
            }
        }
예제 #12
0
        private void GenerateLevel()
        {
            foreach (var brick in bricks)
            {
                Destroy(brick);
            }
            bricks.Clear();

            var gradient = RandomE.gradientHSV;

            for (int y = 0; y < wallHeight; y++)
            {
                var lineColor = gradient.Evaluate(y / (wallHeight - 1f));

                var brickSizes = BrickSizes(wallWidth);

                var x             = 0f;
                var previousColor = lineColor;
                for (int i = 0; i < brickSizes.Count; i++)
                {
                    var color = lineColor;
                    while (previousColor == color)
                    {
                        color -= Color.white * RandomE.Range(-0.2f, 0.2f, 3);
                    }
                    previousColor = color;

                    var brickSize = brickSizes[i];
                    if (i >= 0)
                    {
                        x += sizeValues[brickSize] / 2;
                    }

                    var position = Vector3.right * (x - wallWidth / 2f) + Vector3.up * (wallHeightOffset + y / 2f);
                    bricks.Add(GenerateBrick(position, color, brickSize));
                    x += sizeValues[brickSize] / 2;
                }
            }
        }
        private MeshDraft Chair()
        {
            var legWidth       = Random.Range(legWidthLB, legWidthUB);
            var legHeight      = Random.Range(legHeightLB, legHeightUB);
            var seatDimensions = RandomE.Range(seatLB, seatUB);
            var backHeight     = Random.Range(backHeightLB, backHeightUB);

            var chair = new MeshDraft {
                name = "Chair"
            };

            var right   = Vector3.right * (seatDimensions.x - legWidth) / 2;
            var forward = Vector3.forward * (seatDimensions.z - legWidth) / 2;

            var legCenters = new Vector3[]
            {
                -right - forward,
                right - forward,
                right + forward,
                -right + forward
            };

            chair.Add(Leg0(legCenters[0], legWidth, legHeight));
            chair.Add(Leg0(legCenters[1], legWidth, legHeight));
            chair.Add(Leg0(legCenters[2], legWidth, legHeight));
            chair.Add(Leg0(legCenters[3], legWidth, legHeight));

            if (RandomE.Chance(0.3f))
            {
                var stretcherFunc = new Func <Vector3[], float, float, MeshDraft>[]
                {
                    XStretchers,
                    HStretchers,
                    BoxStretchers
                }.Choice();
                chair.Add(stretcherFunc(legCenters, legWidth, legHeight));
            }

            chair.Add(Seat0(Vector3.up * legHeight, seatDimensions.x, seatDimensions.z, seatDimensions.y));

            var backFunc = new Func <Vector3, float, float, float, MeshDraft>[]
            {
                Back0,
                Back1,
                RodBack
            }.Choice();
            var backCenter = Vector3.up * (legHeight + seatDimensions.y) + Vector3.forward * (seatDimensions.z - legWidth) / 2;

            chair.Add(backFunc(backCenter, seatDimensions.x, legWidth, backHeight));

            if (RandomE.Chance(0.3f))
            {
                var armrestsFunc = new Func <Vector3, Vector3, float, float, MeshDraft>[]
                {
                    Armrests0,
                    Armrests1
                }.Choice();
                chair.Add(armrestsFunc(seatDimensions, backCenter, backHeight, legWidth));
            }

            chair.Paint(RandomE.colorHSV);

            return(chair);
        }
예제 #14
0
 protected Vector3 GetRandomOrigin3()
 {
     return(RandomE.Range(-Vector3.one * testRange, Vector3.one * testRange));
 }
예제 #15
0
 protected Vector2 GetRandomOrigin2()
 {
     return(RandomE.Range(-Vector2.one * testRange, Vector2.one * testRange));
 }