using UnityEngine; using Zenject; namespace DanroJump.Gameplay { public sealed class GameplayInstaller : MonoInstaller { [SerializeField] private JumpPlayerController player; [SerializeField] private Camera gameplayCamera; [SerializeField] private PlatformSpawner platformSpawner; [SerializeField] private GameplayDifficultyProgression difficultyProgression; public override void InstallBindings() { if (!ValidateReferences()) { return; } Container.BindInstance(player).AsSingle(); Container.BindInstance(gameplayCamera).AsSingle(); Container.BindInstance(platformSpawner).AsSingle(); Container.BindInstance(difficultyProgression).AsSingle(); Container.Bind().AsSingle(); Container.QueueForInject(player); Container.QueueForInject(difficultyProgression); Container.QueueForInject(platformSpawner); if (gameplayCamera != null && gameplayCamera.TryGetComponent(out VerticalCameraFollow cameraFollow)) { Container.QueueForInject(cameraFollow); } } private bool ValidateReferences() { var isValid = true; isValid &= ValidateReference(player, nameof(player)); isValid &= ValidateReference(gameplayCamera, nameof(gameplayCamera)); isValid &= ValidateReference(platformSpawner, nameof(platformSpawner)); isValid &= ValidateReference(difficultyProgression, nameof(difficultyProgression)); return isValid; } private bool ValidateReference(Object reference, string fieldName) { if (reference != null) { return true; } Debug.LogError($"{nameof(GameplayInstaller)} is missing '{fieldName}' reference.", this); return false; } } }