RandomNearbyPosition for spawning non-startup boids near eachother (needs pre-simulation!) new Boid.GetNearby func, fix Debug import, change UIController AdjustmentsPanel delay, AddBoids docs

This commit is contained in:
Xevion
2020-06-06 05:49:59 -05:00
parent 1aeb7d2c23
commit 0a44ee58ed
4 changed files with 41 additions and 7 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ public class BoidControllerEditor : UnityEditor.Editor {
if (EditorGUI.EndChangeCheck() && Application.isPlaying) {
int diff = controller.boidCount - controller.boids.Count;
if (diff > 1)
controller.AddBoids(diff);
controller.AddBoids(diff, controller.boids.Count > 15);
else if (diff < 0)
controller.RemoveBoids(Mathf.Abs(diff));
}
+10
View File
@@ -285,4 +285,14 @@ public class Boid : MonoBehaviour {
_lineRenderers[2].transform.Rotate(0, 0, _parent.boidFov / 2f);
}
}
/// <summary>
/// Return a random position nearby a certain distance away
/// </summary>
/// <param name="distance">Vector2 position</param>
/// <returns></returns>
public Vector2 GetNearby(float distance) {
return _position + Util.RotateBy(new Vector2(distance, distance),
Random.Range(0f, 360f));
}
}
+28 -4
View File
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using Debug = System.Diagnostics.Debug;
using Random = UnityEngine.Random;
public class BoidController : MonoBehaviour {
@@ -106,15 +105,16 @@ public class BoidController : MonoBehaviour {
/// <summary>
/// Adds a number of boids.
/// </summary>
/// <param name="n"></param>
public void AddBoids(int n) {
/// <param name="n">Number of Boids to add</param>
/// <param name="useNearby">Spawn Boids nearby each other</param>
public void AddBoids(int n, bool useNearby = false) {
// Skip if negative or zero
if (n <= 0)
return;
for (int i = 0; i < n; i++) {
// Instantiate a Boid prefab within the boundaries randomly
Vector2 position = RandomPosition() * 0.90f;
Vector2 position = useNearby ? RandomNearbyPosition() : RandomPosition() * 0.90f;
GameObject boid = Instantiate(boidObject, position, Quaternion.identity);
// Set parent, add Boid component to Boids list
@@ -162,4 +162,28 @@ public class BoidController : MonoBehaviour {
Random.Range(-Boundary.size.x, Boundary.size.x) / 2,
Random.Range(-Boundary.size.y, Boundary.size.y) / 2);
}
/// <summary>
/// Returns a random valid position near a Boid
/// </summary>
/// <returns>A Vector2 position within the set boundaries</returns>
private Vector2 RandomNearbyPosition(int maxRetries = 5) {
for (int i = 0; i < maxRetries; i++) {
Vector2 possible = RandomBoid().GetNearby(boidSeparationRange);
if (Boundary.Contains(possible))
return possible;
}
// if MaxRetries exceeded, fall back to RandomPosition()
Debug.Log($"{maxRetries} retries failed, falling back to RandomPosition");
return RandomPosition();
}
/// <summary>
/// Returns a random Boid
/// </summary>
/// <returns></returns>
public Boid RandomBoid() {
return boids[Random.Range(0, boids.Count - 1)];
}
}
+2 -2
View File
@@ -235,8 +235,8 @@ public class UIController : MonoBehaviour {
GameObject adjPanelGo;
LeanTween
.move((adjPanelGo = adjPanel.gameObject),
adjPanelGo.transform.position + _adjustmentsDiff * (away ? 1 : -1), 1.15f)
.setDelay(away ? 0f : 0.15f)
adjPanelGo.transform.position + _adjustmentsDiff * (away ? 1 : -1), away ? 0.9f : 1.15f)
.setDelay(away ? 0f : 0.05f)
.setEase(LeanTweenType.easeInOutCubic)
.setOnComplete(StartTween());
break;