Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }