using UnityEngine; namespace FlappyBird.Gameplay.Pipes { /// /// ScriptableObject — all configurable pipe-spawning parameters. /// Create via: Assets -> Create -> FlappyBird -> Pipe Settings /// [CreateAssetMenu(fileName = "PipeSettings", menuName = "FlappyBird/Pipe Settings")] public sealed class PipeSettings : ScriptableObject { [Header("Spawning")] [Tooltip("Seconds between each pipe pair spawn.")] [SerializeField, Min(0.1f)] private float spawnInterval = 2f; [Tooltip("X position at which pipes are spawned (right edge of screen).")] [SerializeField] private float spawnX = 10f; [Header("Gap")] [Tooltip("Vertical size of the gap the bird flies through.")] [SerializeField, Min(0.5f)] private float gapSize = 3f; [Tooltip("Minimum Y position of the gap centre.")] [SerializeField] private float minGapCentreY = -2f; [Tooltip("Maximum Y position of the gap centre.")] [SerializeField] private float maxGapCentreY = 2f; [Tooltip("Half the height of a pipe sprite in world units. " + "Used to shift each pipe outward when its pivot is centred. " + "Set to 0 if the pivot is already at the tip facing the gap.")] [SerializeField, Min(0f)] private float pipeHalfHeight = 3f; [Header("Movement")] [Tooltip("Horizontal scroll speed (units per second, positive = leftward).")] [SerializeField, Min(0f)] private float scrollSpeed = 3f; [Tooltip("X position at which a pipe is considered off-screen and returned to pool.")] [SerializeField] private float despawnX = -12f; [Header("Pool")] [Tooltip("Number of pipe pairs pre-allocated in the pool at startup.")] [SerializeField, Min(1)] private int initialPoolSize = 5; // Accessors public float SpawnInterval => spawnInterval; public float SpawnX => spawnX; public float GapSize => gapSize; public float MinGapCentreY => minGapCentreY; public float MaxGapCentreY => maxGapCentreY; public float PipeHalfHeight => pipeHalfHeight; public float ScrollSpeed => scrollSpeed; public float DespawnX => despawnX; public int InitialPoolSize => initialPoolSize; } }