using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class HerdController : MonoBehaviour
|
|
{
|
|
|
|
[SerializeField]
|
|
private GameObject Prefab;
|
|
|
|
[SerializeField]
|
|
private int HerdCount = 50;
|
|
|
|
[SerializeField]
|
|
private Transform SpawnPoint;
|
|
|
|
private List<GameObject> Herd;
|
|
|
|
|
|
|
|
//Recieved movement input from player
|
|
private void OnMovement(InputValue value)
|
|
{
|
|
Vector2 input = value.Get<Vector2>();
|
|
|
|
}
|
|
|
|
|
|
[ContextMenu("Spawn")]
|
|
private void SpawnHerd()
|
|
{
|
|
float radius = 0;
|
|
GameObject prefabExample = Instantiate(Prefab);
|
|
Bounds bound = prefabExample.GetBounds();
|
|
Debug.Log(bound.size);
|
|
Destroy(prefabExample);
|
|
|
|
if (Herd != null)
|
|
Herd.ForEach(p => Destroy(p));
|
|
Herd = new List<GameObject>();
|
|
|
|
for (int i = 0; i < HerdCount; i++)
|
|
{
|
|
|
|
|
|
|
|
int SpawnAttempt = 0;
|
|
while (true)
|
|
{
|
|
|
|
Vector3 position = Vector3.ProjectOnPlane(Random.onUnitSphere, Vector3.up) * radius;
|
|
Quaternion rotation = Quaternion.Euler(0, Random.Range(-25, 25), 0);
|
|
if (SpawnPoint != null)
|
|
position += SpawnPoint.position;
|
|
|
|
if (SpawnPositionValid(position,rotation, bound))
|
|
{
|
|
GameObject newObject = Instantiate(Prefab, position, rotation, transform);
|
|
|
|
Herd.Add(newObject);
|
|
|
|
|
|
break;
|
|
}
|
|
|
|
|
|
SpawnAttempt++;
|
|
if (SpawnAttempt % 10 == 0)
|
|
{
|
|
radius += bound.size.magnitude;
|
|
}
|
|
if (SpawnAttempt == 100)
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
Debug.Log("Total Spawned: " + Herd.Count);
|
|
}
|
|
}
|
|
|
|
|
|
private bool SpawnPositionValid(Vector3 position,Quaternion rotation ,Bounds bound)
|
|
{
|
|
Collider[] colliders = Physics.OverlapBox(position, bound.extents,rotation);
|
|
|
|
Debug.DrawLine(position, position + Vector3.up);
|
|
|
|
foreach(Collider col in colliders)
|
|
{
|
|
if (col.GetComponentInChildren<PlayerController>())
|
|
return false;
|
|
if (col.GetComponentInParent<PlayerController>())
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|