pooper_minigame (#62)
Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Reviewed-on: #62
This commit is contained in:
89
Assets/Scripts/Core/Settings/BirdPooperSettings.cs
Normal file
89
Assets/Scripts/Core/Settings/BirdPooperSettings.cs
Normal file
@@ -0,0 +1,89 @@
|
||||
using AppleHills.Core.Settings;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Core.Settings
|
||||
{
|
||||
[CreateAssetMenu(fileName = "BirdPooperSettings", menuName = "AppleHills/Settings/BirdPooper", order = 5)]
|
||||
public class BirdPooperSettings : BaseSettings, IBirdPooperSettings
|
||||
{
|
||||
[Header("Player Controller")]
|
||||
[Tooltip("Gravity acceleration in units/s²")]
|
||||
[SerializeField] private float gravity = 20f;
|
||||
|
||||
[Tooltip("Upward velocity applied on flap in units/s")]
|
||||
[SerializeField] private float flapForce = 8f;
|
||||
|
||||
[Tooltip("Maximum fall speed (terminal velocity) in units/s")]
|
||||
[SerializeField] private float maxFallSpeed = 15f;
|
||||
|
||||
[Tooltip("Minimum Y boundary")]
|
||||
[SerializeField] private float minY = -5f;
|
||||
|
||||
[Tooltip("Maximum Y boundary")]
|
||||
[SerializeField] private float maxY = 5f;
|
||||
|
||||
[Header("Rotation")]
|
||||
[Tooltip("Maximum rotation angle in degrees (positive = up, negative = down)")]
|
||||
[SerializeField] private float maxRotationAngle = 30f;
|
||||
|
||||
[Tooltip("Speed of rotation interpolation (higher = snappier)")]
|
||||
[SerializeField] private float rotationSpeed = 8f;
|
||||
|
||||
[Header("Obstacles")]
|
||||
[Tooltip("Obstacle scroll speed in units/s")]
|
||||
[SerializeField] private float obstacleMoveSpeed = 5f;
|
||||
|
||||
[Tooltip("Time between obstacle spawns in seconds")]
|
||||
[SerializeField] private float obstacleSpawnInterval = 2f;
|
||||
|
||||
[Tooltip("X position where obstacles spawn (off-screen right)")]
|
||||
[SerializeField] private float obstacleSpawnXPosition = 12f;
|
||||
|
||||
[Tooltip("X position where obstacles are destroyed (off-screen left)")]
|
||||
[SerializeField] private float obstacleDestroyXPosition = -12f;
|
||||
|
||||
[Tooltip("Minimum Y position for obstacle spawns")]
|
||||
[SerializeField] private float obstacleMinSpawnY = -3f;
|
||||
|
||||
[Tooltip("Maximum Y position for obstacle spawns")]
|
||||
[SerializeField] private float obstacleMaxSpawnY = 3f;
|
||||
|
||||
[Header("Poop Projectile")]
|
||||
[Tooltip("Poop fall speed in units/s")]
|
||||
[SerializeField] private float poopFallSpeed = 10f;
|
||||
|
||||
[Tooltip("Y position where poop is destroyed (off-screen bottom)")]
|
||||
[SerializeField] private float poopDestroyYPosition = -10f;
|
||||
|
||||
// Interface implementation
|
||||
public float Gravity => gravity;
|
||||
public float FlapForce => flapForce;
|
||||
public float MaxFallSpeed => maxFallSpeed;
|
||||
public float MinY => minY;
|
||||
public float MaxY => maxY;
|
||||
public float MaxRotationAngle => maxRotationAngle;
|
||||
public float RotationSpeed => rotationSpeed;
|
||||
public float ObstacleMoveSpeed => obstacleMoveSpeed;
|
||||
public float ObstacleSpawnInterval => obstacleSpawnInterval;
|
||||
public float ObstacleSpawnXPosition => obstacleSpawnXPosition;
|
||||
public float ObstacleDestroyXPosition => obstacleDestroyXPosition;
|
||||
public float ObstacleMinSpawnY => obstacleMinSpawnY;
|
||||
public float ObstacleMaxSpawnY => obstacleMaxSpawnY;
|
||||
public float PoopFallSpeed => poopFallSpeed;
|
||||
public float PoopDestroyYPosition => poopDestroyYPosition;
|
||||
|
||||
public override void OnValidate()
|
||||
{
|
||||
base.OnValidate();
|
||||
|
||||
// Validation logic
|
||||
gravity = Mathf.Max(0f, gravity);
|
||||
flapForce = Mathf.Max(0f, flapForce);
|
||||
maxFallSpeed = Mathf.Max(0f, maxFallSpeed);
|
||||
maxRotationAngle = Mathf.Clamp(maxRotationAngle, 0f, 90f);
|
||||
rotationSpeed = Mathf.Max(0.1f, rotationSpeed);
|
||||
obstacleSpawnInterval = Mathf.Max(0.1f, obstacleSpawnInterval);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
3
Assets/Scripts/Core/Settings/BirdPooperSettings.cs.meta
Normal file
3
Assets/Scripts/Core/Settings/BirdPooperSettings.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e7d3f5b948b3454681fa573071bee978
|
||||
timeCreated: 1763596494
|
||||
33
Assets/Scripts/Core/Settings/IBirdPooperSettings.cs
Normal file
33
Assets/Scripts/Core/Settings/IBirdPooperSettings.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
namespace Core.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Settings interface for Bird Pooper minigame.
|
||||
/// Accessed via GameManager.GetSettingsObject<IBirdPooperSettings>()
|
||||
/// </summary>
|
||||
public interface IBirdPooperSettings
|
||||
{
|
||||
// Player Controller
|
||||
float Gravity { get; }
|
||||
float FlapForce { get; }
|
||||
float MaxFallSpeed { get; }
|
||||
float MinY { get; }
|
||||
float MaxY { get; }
|
||||
|
||||
// Rotation
|
||||
float MaxRotationAngle { get; }
|
||||
float RotationSpeed { get; }
|
||||
|
||||
// Obstacles
|
||||
float ObstacleMoveSpeed { get; }
|
||||
float ObstacleSpawnInterval { get; }
|
||||
float ObstacleSpawnXPosition { get; }
|
||||
float ObstacleDestroyXPosition { get; }
|
||||
float ObstacleMinSpawnY { get; }
|
||||
float ObstacleMaxSpawnY { get; }
|
||||
|
||||
// Poop Projectile
|
||||
float PoopFallSpeed { get; }
|
||||
float PoopDestroyYPosition { get; }
|
||||
}
|
||||
}
|
||||
|
||||
3
Assets/Scripts/Core/Settings/IBirdPooperSettings.cs.meta
Normal file
3
Assets/Scripts/Core/Settings/IBirdPooperSettings.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 66509e37e0a549a79de6fe3fa710fd63
|
||||
timeCreated: 1763596482
|
||||
Reference in New Issue
Block a user