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); }
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); }
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); }
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); }
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); }
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); }
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; } } }
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); }
protected Vector3 GetRandomOrigin3() { return(RandomE.Range(-Vector3.one * testRange, Vector3.one * testRange)); }
protected Vector2 GetRandomOrigin2() { return(RandomE.Range(-Vector2.one * testRange, Vector2.one * testRange)); }