using UnityEngine; namespace FlappyBird.Gameplay.Bird { /// /// ScriptableObject that holds all configurable bird physics parameters. /// Create via: Assets → Create → FlappyBird → Bird Settings /// [CreateAssetMenu(fileName = "BirdSettings", menuName = "FlappyBird/Bird Settings")] public sealed class BirdSettings : ScriptableObject { [Header("Jump")] [Tooltip("Upward force applied on each tap (Impulse mode).")] [SerializeField, Min(0f)] private float jumpForce = 5f; [Header("Rotation")] [Tooltip("Maximum upward tilt angle in degrees (positive = nose up).")] [SerializeField] private float maxUpRotation = 30f; [Tooltip("Maximum downward tilt angle in degrees (positive = nose down).")] [SerializeField] private float maxDownRotation = -90f; [Tooltip("Velocity at which the bird reaches full upward rotation.")] [SerializeField] private float rotationUpVelocity = 5f; [Tooltip("Velocity at which the bird reaches full downward rotation.")] [SerializeField] private float rotationDownVelocity = -10f; [Tooltip("Speed at which the rotation visually lerps to the target angle.")] [SerializeField, Min(0f)] private float rotationSpeed = 10f; [Header("Boundaries")] [Tooltip("Y position of the ceiling. Bird dies if it rises above this value.")] [SerializeField] private float maxY = 5f; [Tooltip("Y position of the ground. Bird dies if it falls below this value.")] [SerializeField] private float minY = -5f; // ── Public read-only accessors ────────────────────────────────────── public float JumpForce => jumpForce; public float MaxUpRotation => maxUpRotation; public float MaxDownRotation => maxDownRotation; public float RotationUpVelocity => rotationUpVelocity; public float RotationDownVelocity => rotationDownVelocity; public float RotationSpeed => rotationSpeed; public float MaxY => maxY; public float MinY => minY; } }