From 92d1e3efefd5615d4086ded340f5d005fe44e101 Mon Sep 17 00:00:00 2001 From: Xevion Date: Fri, 5 Jun 2020 19:15:54 -0500 Subject: [PATCH] reset circle/arc/ width/vertexcount with shapedraw, timescale edit, new static array LineRenderers, finished arc drawing base --- Boids/Assets/Scripts/Boid.cs | 41 +++++++++++++++++++------- Boids/Assets/Scripts/BoidController.cs | 7 +++++ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Boids/Assets/Scripts/Boid.cs b/Boids/Assets/Scripts/Boid.cs index 71cb7b7..6da9e05 100644 --- a/Boids/Assets/Scripts/Boid.cs +++ b/Boids/Assets/Scripts/Boid.cs @@ -15,6 +15,8 @@ public class Boid : MonoBehaviour { [NonSerialized] public List latestNeighborhood; [NonSerialized] private BoidController _parent; [NonSerialized] public bool _isFocused = false; + [NonSerialized] private LineRenderer[] _lineRenderers; + private void Start() { _parent = transform.parent @@ -187,7 +189,8 @@ public class Boid : MonoBehaviour { continue; } - + + // Boid passed all checks, add to local Flock list flock.Add(boid); } @@ -203,6 +206,12 @@ public class Boid : MonoBehaviour { _isFocused = true; + // Create all LineRenderers + _lineRenderers = new LineRenderer[3]; + _lineRenderers[0] = GetLineRenderer("Group Range"); + _lineRenderers[1] = GetLineRenderer("Separation Range"); + _lineRenderers[2] = GetLineRenderer("FOV Arc"); + // Update Mesh Material Color var triangle = transform.GetComponent(); triangle.meshRenderer.material.color = Color.red; @@ -218,10 +227,12 @@ public class Boid : MonoBehaviour { // Update Mesh Material Color var oldTriangle = transform.GetComponent(); oldTriangle.meshRenderer.material.color = new Color32(49, 61, 178, 255); - + + // Destroy Line Renderers (and child GameObjects) foreach (Transform child in transform) Destroy(child.gameObject); + Array.Clear(_lineRenderers, 0, _lineRenderers.Length); } /// @@ -231,22 +242,30 @@ public class Boid : MonoBehaviour { /// A LineRenderer public LineRenderer GetLineRenderer(string childName) { var child = new GameObject(childName); + // Make object a child of Boid, set position as such child.transform.SetParent(transform); child.transform.position = transform.position; + // add and return LineRenderer component return child.AddComponent(); } public void Draw(bool redraw) { - if (redraw) - foreach (Transform child in transform) - Destroy(child.gameObject); - + // Clear positions when redrawing + if(redraw) + foreach (LineRenderer lineRenderer in _lineRenderers) + lineRenderer.positionCount = 0; + // Add a LineRenderer for Radius Drawing - DrawCircle(_parent.boidSeparationRange, "Separation Range Circle"); - DrawCircle(_parent.boidGroupRange, "Group Range Circle"); + if(_parent.enableFOVChecks) + ShapeDraw.DrawArc(_lineRenderers[2], _parent.boidFOV, _parent.boidGroupRange); // FOV Arc + else + ShapeDraw.DrawCircle(_lineRenderers[0], _parent.boidGroupRange); // Group Circle + ShapeDraw.DrawCircle(_lineRenderers[1], _parent.boidSeparationRange); // Separation Circle - // Draw FOV Line - DrawArcCentered(_parent.boidGroupRange, Util.Vector2ToAngle(_velocity), - _parent.boidFOV, "FOV Arc"); + if (_parent.enableFOVChecks) { + // Set FOV Arc rotation to mimic Boid transform rotation + _lineRenderers[2].transform.rotation = transform.rotation; + _lineRenderers[2].transform.Rotate(0, 0, _parent.boidFOV / 2f + 180); + } } } \ No newline at end of file diff --git a/Boids/Assets/Scripts/BoidController.cs b/Boids/Assets/Scripts/BoidController.cs index 68aece8..3e15fa6 100644 --- a/Boids/Assets/Scripts/BoidController.cs +++ b/Boids/Assets/Scripts/BoidController.cs @@ -97,6 +97,13 @@ public class BoidController : MonoBehaviour { Boundary = new Rect(Vector2.zero, Space.size * 0.95f); Boundary.center = Space.center; + ShapeDraw.CircleWidth = circleWidth; + ShapeDraw.ArcWidth = circleWidth; + ShapeDraw.CircleVertexCount = circleVertexCount; + // ShapeDraw.ArcVertexCount = arcVertexCount; + + Time.timeScale = 0.3f; + AddBoids(boidCount); }