示例#1
0
        Vector3 DrawLeftRaycastLine(int y, int z, out bool interrupted)
        {
            int lineNumber = (z * (LineCountY)) + (y);

            bool newLine = LeftInterruptLineRenderers.Count <= lineNumber;

            Vector3 spaceOffset = SpaceOffsets[lineNumber];

            Vector3 startPoint = transform.position + new Vector3(
                -1 * (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 - (-1 * Width),
                -(Height / 2) + (YSpacing * y) + (YSpacing / 2) + spaceOffset.y,
                -(Depth / 2) + (ZSpacing * z) + (ZSpacing / 2) + spaceOffset.z);
            // if raycast finds a hit, cut the line short
            RaycastHit hitInfo;

            if (Physics.Raycast(startPoint, Vector3.right, out hitInfo, Width))
            {
                interrupted = true;
                endPoint.x  = startPoint.x - (-1 * (hitInfo.distance));
            }
            else
            {
                interrupted = false;
            }
            // draw line
            LineRenderer lineRenderer;

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

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


            bool render = interrupted;

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

            return(endPoint);
        }
示例#2
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();
        }