private void AddWallCap( Vector3 near, Vector3 far, float hexOuterRadius, int wrapSize ) { near = HexagonPoint.Perturb( near, hexOuterRadius, wrapSize ); far = HexagonPoint.Perturb( far, hexOuterRadius, wrapSize ); Vector3 center = HexagonPoint.WallLerp(near, far); Vector3 thickness = HexagonPoint.WallThicknessOffset(near, far); Vector3 vertex1; Vector3 vertex2; Vector3 vertex3; Vector3 vertex4; vertex1 = vertex3 = center - thickness; vertex2 = vertex4 = center + thickness; vertex3.y = vertex4.y = center.y + HexagonPoint.wallHeight; walls.AddQuadUnperturbed(vertex1, vertex2, vertex3, vertex4); }
private void AddWallWedge( Vector3 near, Vector3 far, Vector3 point, float hexOuterRadius, int wrapSize ) { near = HexagonPoint.Perturb( near, hexOuterRadius, wrapSize ); far = HexagonPoint.Perturb( far, hexOuterRadius, wrapSize ); point = HexagonPoint.Perturb( point, hexOuterRadius, wrapSize ); Vector3 center = HexagonPoint.WallLerp(near, far); Vector3 thickness = HexagonPoint.WallThicknessOffset(near, far); Vector3 vertex1; Vector3 vertex2; Vector3 vertex3; Vector3 vertex4; Vector3 pointTop = point; point.y = center.y; vertex1 = vertex3 = center - thickness; vertex2 = vertex4 = center + thickness; vertex3.y = vertex4.y = pointTop.y = center.y + HexagonPoint.wallHeight; walls.AddQuadUnperturbed(vertex1, point, vertex3, pointTop); walls.AddQuadUnperturbed(point, vertex2, pointTop, vertex4); walls.AddTriangleUnperturbed(pointTop, vertex3, vertex4); }
private void AddWallSegment( Vector3 nearLeft, Vector3 farLeft, Vector3 nearRight, Vector3 farRight, float hexOuterRadius, int wrapSize, bool addTower = false ) { nearLeft = HexagonPoint.Perturb( nearLeft, hexOuterRadius, wrapSize ); farLeft = HexagonPoint.Perturb( farLeft, hexOuterRadius, wrapSize ); nearRight = HexagonPoint.Perturb( nearRight, hexOuterRadius, wrapSize ); farRight = HexagonPoint.Perturb( farRight, hexOuterRadius, wrapSize ); Vector3 left = HexagonPoint.WallLerp(nearLeft, farLeft); Vector3 right = HexagonPoint.WallLerp(nearRight, farRight); Vector3 leftThicknessOffset = HexagonPoint.WallThicknessOffset(nearLeft, farLeft); Vector3 rightThicknessOffset = HexagonPoint.WallThicknessOffset(nearRight, farRight); float leftTop = left.y + HexagonPoint.wallHeight; float rightTop = right.y + HexagonPoint.wallHeight; Vector3 vertex1; Vector3 vertex2; Vector3 vertex3; Vector3 vertex4; vertex1 = vertex3 = left - leftThicknessOffset; vertex2 = vertex4 = right - rightThicknessOffset; vertex3.y = leftTop; vertex4.y = rightTop; walls.AddQuadUnperturbed(vertex1, vertex2, vertex3, vertex4); Vector3 top1 = vertex3; Vector3 top2 = vertex4; vertex1 = vertex3 = left + leftThicknessOffset; vertex2 = vertex4 = right + rightThicknessOffset; vertex3.y = leftTop; vertex4.y = rightTop; walls.AddQuadUnperturbed(vertex2, vertex1, vertex4, vertex3); walls.AddQuadUnperturbed(top1, top2, vertex3, vertex4); if (addTower) { Transform towerInstance = Instantiate(wallTower); towerInstance.transform.localPosition = (left + right) * 0.5f; Vector3 rightDirection = right - left; rightDirection.y = 0f; towerInstance.transform.right = rightDirection; towerInstance.SetParent(_container, false); } }