Update Project

This commit is contained in:
2026-03-20 13:04:43 +02:00
parent 9b587e6cba
commit beae2dea89
2295 changed files with 251259 additions and 33 deletions
@@ -0,0 +1,60 @@
using UnityEngine;
namespace FlappyBird.Gameplay.Pipes
{
/// <summary>
/// Pure C# service — all pipe-spawning and timing logic.
/// No MonoBehaviour, no Unity lifecycle. Ticked externally by PipeSpawnerTicker.
/// </summary>
public sealed class PipeSpawner : IPipeSpawner
{
private readonly IPipePool _pool;
private readonly PipeSettings _settings;
private float _timer;
/// <summary>Constructor injection.</summary>
public PipeSpawner(IPipePool pool, PipeSettings settings)
{
_pool = pool;
_settings = settings;
}
// ── IPipeSpawner ───────────────────────────────────────────────────
/// <inheritdoc/>
public void Tick(float deltaTime)
{
_timer += deltaTime;
if (_timer >= _settings.SpawnInterval)
{
_timer -= _settings.SpawnInterval;
SpawnPair();
}
}
/// <inheritdoc/>
public void ResetTimer() => _timer = 0f;
// ── Private helpers ────────────────────────────────────────────────
/// <summary>
/// Fetches a pipe pair from the pool, positions it with a random gap centre,
/// then places the top and bottom pipe transforms around that gap.
/// </summary>
private void SpawnPair()
{
float gapCentreY = Random.Range(_settings.MinGapCentreY, _settings.MaxGapCentreY);
float halfGap = _settings.GapSize * 0.5f;
float pipeOffset = _settings.PipeHalfHeight; // shifts pivot to tip when centred
PipeView pipe = _pool.Get();
pipe.transform.position = new Vector3(_settings.SpawnX, 0f, 0f);
// Bottom pipe: pivot centre pushed downward so the tip meets the gap edge.
pipe.BottomPipe.position = new Vector3(
_settings.SpawnX,
gapCentreY - halfGap - pipeOffset,
0f);
// Top pipe: pivot centre pushed upward so the tip meets the gap edge.
pipe.TopPipe.position = new Vector3(
_settings.SpawnX,
gapCentreY + halfGap + pipeOffset,
0f);
}
}
}