From dadb6323cc0c62a0cb3bc64abccdfb12df1ee9a3 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sat, 6 Jun 2020 04:59:45 -0500 Subject: [PATCH] adjust boundary forces and boundary dimensions --- Boids/Assets/Editor/BoidControllerEditor.cs | 4 ++-- Boids/Assets/Scenes/Project.unity | 7 ++----- Boids/Assets/Scripts/Boid.cs | 17 ++++++++++++++--- Boids/Assets/Scripts/BoidController.cs | 4 ++-- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Boids/Assets/Editor/BoidControllerEditor.cs b/Boids/Assets/Editor/BoidControllerEditor.cs index 3771560..e24d384 100644 --- a/Boids/Assets/Editor/BoidControllerEditor.cs +++ b/Boids/Assets/Editor/BoidControllerEditor.cs @@ -9,7 +9,7 @@ public class BoidControllerEditor : UnityEditor.Editor { // Boid Count update EditorGUI.BeginChangeCheck(); - controller.boidCount = EditorGUILayout.IntSlider("Boid Count", controller.boidCount, -1, 500); + controller.boidCount = EditorGUILayout.IntSlider("Boid Count", controller.boidCount, 0, 500); // Check must be performed or Boids will be added outside of gameplay if (EditorGUI.EndChangeCheck() && Application.isPlaying) { int diff = controller.boidCount - controller.boids.Count; @@ -23,7 +23,7 @@ public class BoidControllerEditor : UnityEditor.Editor { 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.boundaryForce = EditorGUILayout.Slider("Boundary Force", controller.boundaryForce, 0.25f, 500f); controller.maxSteerForce = EditorGUILayout.Slider("Max Steer Force", controller.maxSteerForce, 1f, 500f); EditorGUI.BeginChangeCheck(); diff --git a/Boids/Assets/Scenes/Project.unity b/Boids/Assets/Scenes/Project.unity index 453310c..cb6506f 100644 --- a/Boids/Assets/Scenes/Project.unity +++ b/Boids/Assets/Scenes/Project.unity @@ -1254,7 +1254,6 @@ MonoBehaviour: m_EditorClassIdentifier: boidCount: 244 boidGroupRange: 3.29 - boidStartVelocity: 14.8 minSpeed: 9.225757 maxSpeed: 9.225757 globalBias: 1 @@ -1266,15 +1265,13 @@ MonoBehaviour: enableAlignment: 1 enableCohesion: 1 enableBoundary: 1 - enableFOVChecks: 1 + enableFovChecks: 1 boidSeparationRange: 1.4 boundaryForce: 50 localFlocks: 1 edgeWrapping: 1 - circleVertexCount: 360 - circleWidth: 0.1 maxSteerForce: 383 - boidFOV: 297 + boidFov: 239 focusedBoid: {fileID: 0} boidObject: {fileID: 1737515784064720040, guid: 23e1eaaf69d4ef342ac3ef9590f6c642, type: 3} diff --git a/Boids/Assets/Scripts/Boid.cs b/Boids/Assets/Scripts/Boid.cs index 4a849f7..df8f911 100644 --- a/Boids/Assets/Scripts/Boid.cs +++ b/Boids/Assets/Scripts/Boid.cs @@ -15,7 +15,7 @@ public class Boid : MonoBehaviour { [NonSerialized] public int latestNeighborhoodCount = 0; [NonSerialized] public List latestNeighborhood; [NonSerialized] private BoidController _parent; - [NonSerialized] public bool _isFocused; + [NonSerialized] public bool _isFocused = false; [NonSerialized] private LineRenderer[] _lineRenderers; @@ -38,11 +38,12 @@ public class Boid : MonoBehaviour { transform.position = _position; } else { + // Find local neighborhood flock Vector2 acceleration = Vector2.zero; List flock = _parent.localFlocks ? GetFlock(_parent.boids, _parent.boidGroupRange) : _parent.boids; latestNeighborhoodCount = flock.Count; - // Only update latest neighborhood when we need it for focused boid gizmo draws + // Only update latest neighborhood when we need it for focused boid Gizmo draws if (_isFocused) latestNeighborhood = flock; @@ -56,8 +57,9 @@ public class Boid : MonoBehaviour { acceleration += SteerTowards(Rule3(flock)) * _parent.alignmentBias; } - if (_parent.enableBoundary && _parent.Boundary.Contains(_position)) + if (_parent.enableBoundary && !_parent.Boundary.Contains(_position)) { acceleration += SteerTowards(RuleBound()) * _parent.boundaryBias; + } // Limit the Velocity Vector to a certain Magnitude _velocity += acceleration * Time.deltaTime; @@ -75,6 +77,11 @@ public class Boid : MonoBehaviour { Wrapping(); } + /// + /// Assists with clamping and normalizing a Vector2 force + /// + /// Force Vector being applied by a rule + /// Vector2 force to be applied private Vector2 SteerTowards(Vector2 vector) { Vector2 v = vector.normalized * _parent.maxSpeed - _velocity; return Vector2.ClampMagnitude(v, _parent.maxSteerForce); @@ -252,6 +259,10 @@ public class Boid : MonoBehaviour { return child.AddComponent(); } + /// + /// Draw (or re-draw) all lines corresponding to separation and group circles and FOV Arc + /// + /// true if draw operation should be treated as a re-draw public void Draw(bool redraw) { // Clear positions when redrawing if(redraw) diff --git a/Boids/Assets/Scripts/BoidController.cs b/Boids/Assets/Scripts/BoidController.cs index 01ba1f3..28f3be9 100644 --- a/Boids/Assets/Scripts/BoidController.cs +++ b/Boids/Assets/Scripts/BoidController.cs @@ -98,7 +98,7 @@ public class BoidController : MonoBehaviour { float height = 2f * Cam.orthographicSize; var size = new Vector2(height * Cam.aspect, height); Space = new Rect((Vector2) transform.position - size / 2, size); - Boundary = new Rect(Vector2.zero, Space.size * 0.95f); + Boundary = new Rect(Vector2.zero, Space.size * 0.90f); Boundary.center = Space.center; } @@ -113,7 +113,7 @@ public class BoidController : MonoBehaviour { for (int i = 0; i < n; i++) { // Instantiate a Boid prefab within the boundaries randomly - Vector2 position = RandomPosition() * 0.95f; + Vector2 position = RandomPosition() * 0.90f; GameObject boid = Instantiate(boidObject, position, Quaternion.identity); // Set parent, add Boid component to Boids list