using UnityEngine;
using UnityEngine.Serialization;
namespace PlatypusIdeas.AirPath.Runtime.Configuration {
/// <summary>
/// Configuration for bird swarm behavior and spawning
/// </summary>
[CreateAssetMenu(fileName = "SwarmConfig", menuName = "Pathfinding/Configurations/Swarm Configuration")]
public class SwarmConfiguration : ConfigurationBase {
[FormerlySerializedAs("numberOfBirds")]
[Header("Swarm Settings")]
[SerializeField, Range(1, 50)] private int numberOfAgents = 5;
[SerializeField, Range(0f, 20f)] private float spawnRadius = 5f;
[SerializeField, Range(0f, 50f)] private float agentHeightOffset = 10f;
[Header("Swarm Behavior")]
[SerializeField, Range(0f, 10f)] private float pathFollowRadius = 3f;
[SerializeField, Range(0f, 10f)] private float heightVariation = 2f;
[SerializeField, Range(0f, 2f)] private float staggerDelay = 0.5f;
[SerializeField] private bool maintainFormation = true;
[Header("Movement Settings")]
[SerializeField, Range(1f, 50f)] private float defaultMoveSpeed = 10f;
[SerializeField, Range(1f, 20f)] private float defaultRotationSpeed = 5f;
[SerializeField, Range(0.5f, 5f)] private float reachThreshold = 2f;
// Properties
public int NumberOfAgents => numberOfAgents;
public float SpawnRadius => spawnRadius;
public float AgentHeightOffset => agentHeightOffset;
public float PathFollowRadius => pathFollowRadius;
public float HeightVariation => heightVariation;
public float StaggerDelay => staggerDelay;
public bool MaintainFormation => maintainFormation;
public float DefaultMoveSpeed => defaultMoveSpeed;
public float DefaultRotationSpeed => defaultRotationSpeed;
public float ReachThreshold => reachThreshold;
public override bool Validate() {
bool valid = true;
if (spawnRadius < 0) {
Debug.LogWarning($"[{ConfigurationName}] Spawn radius cannot be negative");
spawnRadius = 0;
valid = false;
}
return valid;
}
public override void ResetToDefaults() {
numberOfAgents = 5;
spawnRadius = 5f;
agentHeightOffset = 10f;
pathFollowRadius = 3f;
heightVariation = 2f;
staggerDelay = 0.5f;
maintainFormation = true;
defaultMoveSpeed = 10f;
defaultRotationSpeed = 5f;
reachThreshold = 2f;
}
}
}