void AddWallSegment(Vector3 nearLeft, Vector3 farLeft, Vector3 nearRight, Vector3 farRight, bool addTower = false) { // pre-perturb our vertices nearLeft = HexMetrics.Perturb(nearLeft); nearRight = HexMetrics.Perturb(nearRight); farLeft = HexMetrics.Perturb(farLeft); farRight = HexMetrics.Perturb(farRight); var left = HexMetrics.WallLerp(nearLeft, farLeft); var right = HexMetrics.WallLerp(nearRight, farRight); var leftThicknessOffset = HexMetrics.WallThicknessOffset(nearLeft, farLeft); var rightThicknessOffset = HexMetrics.WallThicknessOffset(nearRight, farRight); var leftTop = left.y + HexMetrics.wallHeight; var rightTop = right.y + HexMetrics.wallHeight; Vector3 v1, v2, v3, v4; v1 = v3 = left - leftThicknessOffset; v2 = v4 = right - rightThicknessOffset; v3.y = leftTop; v4.y = rightTop; walls.AddQuadUnperturbed(v1, v2, v3, v4); Vector3 t1 = v3, t2 = v4; // make the wall double-sided v1 = v3 = left + leftThicknessOffset; v2 = v4 = right + rightThicknessOffset; v3.y = leftTop; v4.y = rightTop; walls.AddQuadUnperturbed(v2, v1, v4, v3); // add a wall top too! walls.AddQuadUnperturbed(t1, t2, v3, v4); if (!addTower) { return; } var towerPos = (left + right) * 0.5f; var rightDir = right - left; rightDir.y = 0; var towerRot = Quaternion.FromToRotation(Vector3.right, rightDir); Instantiate(wallTower, towerPos, towerRot, m_Container); }
void AddWallCap(Vector3 near, Vector3 far) { near = HexMetrics.Perturb(near); far = HexMetrics.Perturb(far); var center = HexMetrics.WallLerp(near, far); var thickness = HexMetrics.WallThicknessOffset(near, far); Vector3 v1, v2, v3, v4; v1 = v3 = center - thickness; v2 = v4 = center + thickness; v3.y = v4.y = center.y + HexMetrics.wallHeight; walls.AddQuadUnperturbed(v1, v2, v3, v4); }
void AddWallWedge(Vector3 near, Vector3 far, Vector3 point) { near = HexMetrics.Perturb(near); far = HexMetrics.Perturb(far); point = HexMetrics.Perturb(point); var center = HexMetrics.WallLerp(near, far); var thickness = HexMetrics.WallThicknessOffset(near, far); Vector3 v1, v2, v3, v4; var pointTop = point; point.y = center.y; v1 = v3 = center - thickness; v2 = v4 = center + thickness; v3.y = v4.y = pointTop.y = center.y + HexMetrics.wallHeight; walls.AddQuadUnperturbed(v1, point, v3, pointTop); walls.AddQuadUnperturbed(point, v2, pointTop, v4); walls.AddTriangleUnperturbed(pointTop, v3, v4); }