mirror of
https://github.com/Xevion/Boids.git
synced 2025-12-13 20:11:02 -06:00
implement seblague's acceleration based formulas, may require tweaking
This commit is contained in:
@@ -56,14 +56,15 @@ public class Boid : MonoBehaviour {
|
|||||||
acceleration += SteerTowards(RuleBound()) * _parent.boundaryBias;
|
acceleration += SteerTowards(RuleBound()) * _parent.boundaryBias;
|
||||||
|
|
||||||
// Limit the Velocity Vector to a certain Magnitude
|
// Limit the Velocity Vector to a certain Magnitude
|
||||||
_velocity += acceleration;
|
_velocity += acceleration * Time.deltaTime;
|
||||||
float speed = _velocity.magnitude;
|
float speed = _velocity.magnitude;
|
||||||
Vector2 dir = _velocity / speed;
|
Vector2 dir = _velocity / speed;
|
||||||
speed = Mathf.Clamp(speed, _parent.minSpeed, _parent.maxSpeed);
|
speed = Mathf.Clamp(speed, _parent.minSpeed, _parent.maxSpeed);
|
||||||
_velocity = dir * speed;
|
_velocity = dir * speed;
|
||||||
|
|
||||||
_position += _velocity;
|
_position += _velocity * Time.deltaTime;
|
||||||
transform.position = new Vector3(_position.x, _position.y, 0);
|
transform.position = new Vector3(_position.x, _position.y, 0);
|
||||||
|
// transform.forward = dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_parent.edgeWrapping)
|
if (_parent.edgeWrapping)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class BoidController : MonoBehaviour {
|
|||||||
[SerializeField] public bool edgeWrapping = true; // Enforce Edge Wrapping
|
[SerializeField] public bool edgeWrapping = true; // Enforce Edge Wrapping
|
||||||
[SerializeField] public int circleVertexCount = 40; // The number of vertices for circles displayed
|
[SerializeField] public int circleVertexCount = 40; // The number of vertices for circles displayed
|
||||||
[SerializeField] public float circleWidth = 0.1f; // Width of circle
|
[SerializeField] public float circleWidth = 0.1f; // Width of circle
|
||||||
[SerializeField] public float maxSteerForce = 1f;
|
[SerializeField] public float maxSteerForce = 10f;
|
||||||
|
|
||||||
|
|
||||||
public Boid focusedBoid; // A focused Boid has special rendering
|
public Boid focusedBoid; // A focused Boid has special rendering
|
||||||
|
|||||||
@@ -21,17 +21,18 @@ public class BoidControllerEditor : Editor {
|
|||||||
|
|
||||||
// Basic Boid Controller Attributes
|
// Basic Boid Controller Attributes
|
||||||
controller.boidGroupRange = EditorGUILayout.Slider("Group Range", controller.boidGroupRange, 0.01f, 7.5f);
|
controller.boidGroupRange = EditorGUILayout.Slider("Group Range", controller.boidGroupRange, 0.01f, 7.5f);
|
||||||
controller.boidStartVelocity = EditorGUILayout.Slider("Start Velocity", controller.boidStartVelocity, 0.01f, 5.0f);
|
controller.boidStartVelocity = EditorGUILayout.Slider("Start Velocity", controller.boidStartVelocity, 0.01f, 25.0f);
|
||||||
controller.minSpeed = EditorGUILayout.Slider("Minimum Speed", controller.minSpeed, 0.01f, 5.0f);
|
controller.minSpeed = EditorGUILayout.Slider("Minimum Speed", controller.minSpeed, 0.01f, 25.0f);
|
||||||
controller.maxSpeed = EditorGUILayout.Slider("Maximum Speed", controller.maxSpeed, 0.01f, 5.0f);
|
controller.maxSpeed = EditorGUILayout.Slider("Maximum Speed", controller.maxSpeed, 0.01f, 25.0f);
|
||||||
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.boundaryForce = EditorGUILayout.Slider("Boundary Force", controller.boundaryForce, 0.25f, 1f);
|
controller.boundaryForce = EditorGUILayout.Slider("Boundary Force", controller.boundaryForce, 0.25f, 1f);
|
||||||
|
controller.maxSteerForce = EditorGUILayout.Slider("Max Steer Force", controller.maxSteerForce, 1f, 100f);
|
||||||
|
|
||||||
// Boid Bias Attributes
|
// Boid Bias Attributes
|
||||||
controller.alignmentBias = EditorGUILayout.Slider("Alignment Bias", controller.alignmentBias, 0.001f, 0.5f);
|
controller.alignmentBias = EditorGUILayout.Slider("Alignment Bias", controller.alignmentBias, 0.001f, 1.5f);
|
||||||
controller.cohesionBias = EditorGUILayout.Slider("Cohesion Bias", controller.cohesionBias, 0.001f, 0.5f);
|
controller.cohesionBias = EditorGUILayout.Slider("Cohesion Bias", controller.cohesionBias, 0.001f, 1.5f);
|
||||||
controller.separationBias = EditorGUILayout.Slider("Separation Bias", controller.separationBias, 0.001f, 0.5f);
|
controller.separationBias = EditorGUILayout.Slider("Separation Bias", controller.separationBias, 0.001f, 1.5f);
|
||||||
controller.boundaryBias = EditorGUILayout.Slider("Boundary Bias", controller.boundaryBias, 0.01f, 0.5f);
|
controller.boundaryBias = EditorGUILayout.Slider("Boundary Bias", controller.boundaryBias, 0.01f, 1.5f);
|
||||||
|
|
||||||
controller.localFlocks = EditorGUILayout.Toggle("Use Groups?", controller.localFlocks);
|
controller.localFlocks = EditorGUILayout.Toggle("Use Groups?", controller.localFlocks);
|
||||||
controller.edgeWrapping = EditorGUILayout.Toggle("Enforce Wrapping?", controller.edgeWrapping);
|
controller.edgeWrapping = EditorGUILayout.Toggle("Enforce Wrapping?", controller.edgeWrapping);
|
||||||
|
|||||||
Reference in New Issue
Block a user