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