diff --git a/Boids/Assets/Editor/BoidControllerEditor.cs b/Boids/Assets/Editor/BoidControllerEditor.cs index c94d717..44ea563 100644 --- a/Boids/Assets/Editor/BoidControllerEditor.cs +++ b/Boids/Assets/Editor/BoidControllerEditor.cs @@ -2,7 +2,7 @@ using UnityEngine; [CustomEditor(typeof(BoidController))] -public class BoidControllerEditor : Editor { +public class BoidControllerEditor : UnityEditor.Editor { public override void OnInspectorGUI() { var controller = (BoidController) target; bool redraw = false; @@ -20,23 +20,26 @@ public class BoidControllerEditor : Editor { } // Basic Boid Controller Attributes - controller.boidStartVelocity = EditorGUILayout.Slider("Start Velocity", controller.boidStartVelocity, 0.01f, 25.0f); - EditorGUILayout.MinMaxSlider("Speed Limit", ref controller.minSpeed, ref controller.maxSpeed, 0.01f, 25f); + controller.boidStartVelocity = + EditorGUILayout.Slider("Start Velocity", controller.boidStartVelocity, 0.01f, 25.0f); + EditorGUILayout.MinMaxSlider("Speed Limit", ref controller.minSpeed, ref controller.maxSpeed, 0.01f, 25f); // controller.minSpeed = EditorGUILayout.Slider("Minimum Speed", controller.minSpeed, 0.01f, 25.0f); // controller.maxSpeed = EditorGUILayout.Slider("Maximum Speed", controller.maxSpeed, 0.01f, 25.0f); controller.boundaryForce = EditorGUILayout.Slider("Boundary Force", controller.boundaryForce, 0.25f, 50f); controller.maxSteerForce = EditorGUILayout.Slider("Max Steer Force", controller.maxSteerForce, 1f, 500f); - + EditorGUI.BeginChangeCheck(); controller.boidGroupRange = EditorGUILayout.Slider("Group Range", controller.boidGroupRange, 0.01f, 7.5f); - controller.boidSeparationRange = EditorGUILayout.Slider("Separation Range", controller.boidSeparationRange, 0.01f, 5.0f); + controller.boidSeparationRange = + EditorGUILayout.Slider("Separation Range", controller.boidSeparationRange, 0.01f, 5.0f); controller.boidFOV = EditorGUILayout.Slider("Boid FOV", controller.boidFOV, 1f, 360f); redraw = redraw || EditorGUI.EndChangeCheck(); - - // Boid Bias Attributes + + // Boid Bias Attributes controller.alignmentBias = EditorGUILayout.Slider("Alignment Bias", controller.alignmentBias, 0.001f, 1.5f); controller.cohesionBias = EditorGUILayout.Slider("Cohesion Bias", controller.cohesionBias, 0.001f, 1.5f); - controller.separationBias = EditorGUILayout.Slider("Separation Bias", controller.separationBias, 0.001f, 2.5f); + controller.separationBias = + EditorGUILayout.Slider("Separation Bias", controller.separationBias, 0.001f, 2.5f); controller.boundaryBias = EditorGUILayout.Slider("Boundary Bias", controller.boundaryBias, 0.01f, 1.5f); controller.localFlocks = EditorGUILayout.Toggle("Use Groups?", controller.localFlocks); @@ -49,7 +52,8 @@ public class BoidControllerEditor : Editor { // Boid Rendering EditorGUI.BeginChangeCheck(); - controller.circleVertexCount = EditorGUILayout.IntSlider("Circle Vertex Count", controller.circleVertexCount, 4, 360); + controller.circleVertexCount = + EditorGUILayout.IntSlider("Circle Vertex Count", controller.circleVertexCount, 4, 360); controller.circleWidth = EditorGUILayout.Slider("Circle Line Width", controller.circleWidth, 0.01f, 1f); redraw = redraw || EditorGUI.EndChangeCheck(); diff --git a/Boids/Assets/Editor/BoidEditor.cs b/Boids/Assets/Editor/BoidEditor.cs new file mode 100644 index 0000000..dd7e30d --- /dev/null +++ b/Boids/Assets/Editor/BoidEditor.cs @@ -0,0 +1,17 @@ +using UnityEditor; +using UnityEngine; + +// [CustomEditor(typeof(Boid))] +// public class BoidEditor : UnityEditor.Editor { +// public override void OnInspectorGUI() { +// base.OnInspectorGUI(); +// } +// } + +public class BoidGizmoDrawer { + [DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)] + static void DrawGizmo(Boid boid, GizmoType gizmoType) { + // Simply draw the # of Boids within the perceived flock + Handles.Label(boid.transform.position, $"{boid.latestNeighborhoodCount}"); + } +} \ No newline at end of file diff --git a/Boids/Assets/Editor/BoidEditor.cs.meta b/Boids/Assets/Editor/BoidEditor.cs.meta new file mode 100644 index 0000000..02549a6 --- /dev/null +++ b/Boids/Assets/Editor/BoidEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f4b27abbe35a49dd946d059c0ebe4cea +timeCreated: 1590672982 \ No newline at end of file diff --git a/Boids/Assets/Scripts/Boid.cs b/Boids/Assets/Scripts/Boid.cs index 2d8c273..4207fb8 100644 --- a/Boids/Assets/Scripts/Boid.cs +++ b/Boids/Assets/Scripts/Boid.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using UnityEditor; using UnityEngine; // Boids are represented by a moving, rotating triangle. @@ -11,7 +10,7 @@ public class Boid : MonoBehaviour { [NonSerialized] private bool _isWrappingX = false; [NonSerialized] private bool _isWrappingY = false; [NonSerialized] private Vector2 _centeringVelocity; - [NonSerialized] private int _latestNeighborhoodCount = 0; + [NonSerialized] public int latestNeighborhoodCount = 0; [NonSerialized] private BoidController _parent; [NonSerialized] private bool _isFocused = false; @@ -36,7 +35,7 @@ public class Boid : MonoBehaviour { else { Vector2 acceleration = Vector2.zero; List flock = _parent.localFlocks ? GetFlock(_parent.boids, _parent.boidGroupRange) : _parent.boids; - _latestNeighborhoodCount = flock.Count; + latestNeighborhoodCount = flock.Count; // Calculate all offsets and multiple by magnitudes given if (flock.Count > 0) { @@ -67,13 +66,6 @@ public class Boid : MonoBehaviour { Wrapping(); } -#if UNITY_EDITOR - private void OnDrawGizmos() { - // Show # of Boids in Neighborhood - Handles.Label(transform.position, $"{_latestNeighborhoodCount}"); - } -#endif - private Vector2 SteerTowards(Vector2 vector) { Vector2 v = vector.normalized * _parent.maxSpeed - _velocity; return Vector2.ClampMagnitude(v, _parent.maxSteerForce);