예제 #1
0
        void UpdateLineCounts()
        {
            // force even numbers so that we can draw triangles correctly
            if (_LineCountY % 2 != 0)
            {
                _LineCountY += 1;
            }
            if (_LineCountZ % 2 != 0)
            {
                _LineCountZ += 1;
            }

            LineCountY = _LineCountY;
            LineCountZ = _LineCountZ;

            // wipe lines for recalculation
            LeftInterruptLineObjects.ForEach(g => GameObject.Destroy(g));
            LeftInterruptLineObjects.Clear();

            RightRaycastLineObjects.ForEach(g => GameObject.Destroy(g));
            RightRaycastLineObjects.Clear();

            LeftConnectingQuadObjects.ForEach(g => GameObject.Destroy(g));
            LeftConnectingQuadObjects.Clear();

            RightConnectingQuadObjects.ForEach(g => GameObject.Destroy(g));
            RightConnectingQuadObjects.Clear();

            LeftInterruptLineRenderers.Clear();

            RightRaycastLineRenderers.Clear();

            LeftConnectingQuadLineRenderers.Clear();

            RightConnectingQuadLineRenderers.Clear();

            // recalculate spacing offsets
            CalculateSpacing();
        }
예제 #2
0
        void DrawRightRaycastLine(int y, int z, bool interrupted)
        {
            int  lineNumber = y + (LineCountY * z);
            bool newLine    = RightRaycastLineRenderers.Count <= lineNumber;

            // get the line, and if it doesn't exist initialise it
            LineRenderer lineRenderer;

            if (newLine)
            {
                // if it's new, create it
                GameObject lineObject;
                CreateLineRenderer(out lineObject, out lineRenderer);
                RightRaycastLineObjects.Add(lineObject);
                RightRaycastLineRenderers.Add(lineRenderer);
            }
            else
            {
                lineRenderer = RightRaycastLineRenderers[lineNumber];
            }

            if (!interrupted)
            {
                // it the left side hasn't been interrupted,
                // don't bother drawing this one
                lineRenderer.enabled = false;
                return;
            }
            else
            {
                // if it has, determine the interrupt point on this side

                // grab the space offset
                Vector3 spaceOffset = SpaceOffsets[lineNumber];

                Vector3 startPoint = transform.position + new Vector3(
                    (Width / 2),
                    -(Height / 2) + (YSpacing * y) + (YSpacing / 2) + spaceOffset.y,
                    -(Depth / 2) + (ZSpacing * z) + (ZSpacing / 2) + spaceOffset.z);
                Vector3 endPoint = transform.position + new Vector3(
                    startPoint.x - Width,
                    -(Height / 2) + (YSpacing * y) + (YSpacing / 2) + spaceOffset.y,
                    -(Depth / 2) + (ZSpacing * z) + (ZSpacing / 2) + spaceOffset.z);
                RaycastHit hitInfo;
                if (Physics.Raycast(startPoint, Vector3.left, out hitInfo, Width))
                {
                    endPoint.x = startPoint.x - hitInfo.distance;
                }

                lineRenderer.enabled = true;

                lineRenderer.SetPositions(new Vector3[] {
                    startPoint, endPoint
                });
            }

            bool render = interrupted;

            if (!IsVisualisingRightRaycasts)
            {
                render = false;
            }
            lineRenderer.enabled = render;
        }