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); }
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(); }