Update Project
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
using UnityEngine;
|
||||
using Zenject;
|
||||
using FlappyBird.Core;
|
||||
|
||||
namespace FlappyBird.Gameplay.Bird
|
||||
{
|
||||
/// <summary>
|
||||
/// Thin MonoBehaviour on the bird GameObject.
|
||||
/// Responsibilities:
|
||||
/// - Detect solid pipe collisions (OnCollisionEnter2D)
|
||||
/// - Detect trigger-based pipe collisions (OnTriggerEnter2D, tag "Obstacle")
|
||||
/// - Check vertical screen bounds every frame
|
||||
/// On any death condition: calls IDeathHandler then notifies GameManagerView.
|
||||
/// NO death logic lives here.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public sealed class BirdCollisionView : MonoBehaviour
|
||||
{
|
||||
private GameManagerView _gameManagerView;
|
||||
private BirdSettings _birdSettings;
|
||||
private IGameStateManager _gameStateManager;
|
||||
private IDeathHandler _deathHandler;
|
||||
|
||||
[Inject]
|
||||
private void Construct(
|
||||
GameManagerView gameManagerView,
|
||||
BirdSettings birdSettings,
|
||||
IGameStateManager gameStateManager,
|
||||
IDeathHandler deathHandler)
|
||||
{
|
||||
_gameManagerView = gameManagerView;
|
||||
_birdSettings = birdSettings;
|
||||
_gameStateManager = gameStateManager;
|
||||
_deathHandler = deathHandler;
|
||||
}
|
||||
|
||||
// ── Unity lifecycle ────────────────────────────────────────────────
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Bounds check only runs while playing — prevents re-triggering death.
|
||||
if (_gameStateManager.CurrentState != GameState.Playing) return;
|
||||
CheckBounds();
|
||||
}
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
{
|
||||
Die();
|
||||
}
|
||||
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
// Ignore the score trigger that sits in the gap centre.
|
||||
if (other.CompareTag("Bird")) return;
|
||||
|
||||
if (other.CompareTag("Obstacle"))
|
||||
Die();
|
||||
}
|
||||
|
||||
// ── Private helpers ────────────────────────────────────────────────
|
||||
|
||||
/// <summary>
|
||||
/// Position-based ceiling/floor check.
|
||||
/// No boundary collider objects are required in the scene.
|
||||
/// </summary>
|
||||
private void CheckBounds()
|
||||
{
|
||||
float y = transform.position.y;
|
||||
if (y > _birdSettings.MaxY || y < _birdSettings.MinY)
|
||||
Die();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Single death entry-point — applies side-effects then triggers GameOver.
|
||||
/// Guard inside NotifyBirdDied prevents double-firing.
|
||||
/// </summary>
|
||||
private void Die()
|
||||
{
|
||||
_deathHandler.HandleDeath();
|
||||
_gameManagerView.NotifyBirdDied();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user