Time-based difficulty scaling with object pools and bird pooper restart improvements to the minigame
This commit is contained in:
@@ -31,9 +31,9 @@ namespace Minigames.BirdPooper
|
||||
[Tooltip("Array of target prefabs to spawn randomly")]
|
||||
[SerializeField] private GameObject[] targetPrefabs;
|
||||
|
||||
private IBirdPooperSettings settings;
|
||||
private float spawnTimer;
|
||||
private bool isSpawning;
|
||||
private IBirdPooperSettings _settings;
|
||||
private float _spawnTimer;
|
||||
private bool _isSpawning;
|
||||
private float _currentTargetInterval = 1f;
|
||||
|
||||
[Header("Spawn Timing")]
|
||||
@@ -42,16 +42,17 @@ namespace Minigames.BirdPooper
|
||||
[Tooltip("Maximum interval between target spawns (seconds)")]
|
||||
[SerializeField] private float maxTargetSpawnInterval = 2f;
|
||||
|
||||
internal override void OnManagedAwake()
|
||||
/// <summary>
|
||||
/// Initializes the target spawner by loading settings and validating references.
|
||||
/// Should be called once before spawning begins.
|
||||
/// </summary>
|
||||
private void Initialize()
|
||||
{
|
||||
base.OnManagedAwake();
|
||||
|
||||
// Load settings
|
||||
settings = GameManager.GetSettingsObject<IBirdPooperSettings>();
|
||||
if (settings == null)
|
||||
_settings = GameManager.GetSettingsObject<IBirdPooperSettings>();
|
||||
if (_settings == null)
|
||||
{
|
||||
Debug.LogError("[TargetSpawner] BirdPooperSettings not found!");
|
||||
// continue – we'll use inspector intervals
|
||||
Debug.LogWarning("[TargetSpawner] BirdPooperSettings not found! Using inspector intervals.");
|
||||
}
|
||||
|
||||
// Validate interval range
|
||||
@@ -96,15 +97,15 @@ namespace Minigames.BirdPooper
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!isSpawning)
|
||||
if (!_isSpawning)
|
||||
return;
|
||||
|
||||
spawnTimer += Time.deltaTime;
|
||||
_spawnTimer += Time.deltaTime;
|
||||
|
||||
if (spawnTimer >= _currentTargetInterval)
|
||||
if (_spawnTimer >= _currentTargetInterval)
|
||||
{
|
||||
SpawnTarget();
|
||||
spawnTimer = 0f;
|
||||
_spawnTimer = 0f;
|
||||
// pick next random interval
|
||||
_currentTargetInterval = Random.Range(minTargetSpawnInterval, maxTargetSpawnInterval);
|
||||
}
|
||||
@@ -167,15 +168,34 @@ namespace Minigames.BirdPooper
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start spawning targets at regular intervals.
|
||||
/// Start spawning targets.
|
||||
/// Initializes the spawner if not already initialized, then begins spawning logic.
|
||||
/// </summary>
|
||||
public void StartSpawning()
|
||||
{
|
||||
isSpawning = true;
|
||||
spawnTimer = 0f;
|
||||
// choose initial interval
|
||||
// Initialize if not already done
|
||||
if (_settings == null)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
// Begin the spawning process
|
||||
BeginSpawningTargets();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Internal method that handles the actual spawning startup logic.
|
||||
/// Sets initial state and computes first interval.
|
||||
/// </summary>
|
||||
private void BeginSpawningTargets()
|
||||
{
|
||||
_isSpawning = true;
|
||||
_spawnTimer = 0f;
|
||||
|
||||
// Choose initial interval
|
||||
_currentTargetInterval = Random.Range(minTargetSpawnInterval, maxTargetSpawnInterval);
|
||||
Debug.Log("[TargetSpawner] Started spawning targets");
|
||||
|
||||
Debug.Log($"[TargetSpawner] Started spawning targets with interval {_currentTargetInterval:F2}s");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -183,14 +203,14 @@ namespace Minigames.BirdPooper
|
||||
/// </summary>
|
||||
public void StopSpawning()
|
||||
{
|
||||
isSpawning = false;
|
||||
_isSpawning = false;
|
||||
Debug.Log("[TargetSpawner] Stopped spawning targets");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if spawner is currently spawning.
|
||||
/// </summary>
|
||||
public bool IsSpawning => isSpawning;
|
||||
public bool IsSpawning => _isSpawning;
|
||||
|
||||
/// <summary>
|
||||
/// Draw gizmos to visualize spawn and despawn points in the editor.
|
||||
|
||||
Reference in New Issue
Block a user