using System.Collections.Generic; using Code.Infrastructure.EventBus; using Code.Infrastructure.Generators; using Code.Infrastructure.Input; using Reflex.Attributes; using UnityEngine.AddressableAssets; namespace Code.Infrastructure.Camera { public enum CameraMode { None, ThirdPerson, Platformer } [Config("Configs/Camera/CameraConfig")] public class GameCamera { [ToConfig] public AssetReference Camera; } public interface ICameraInitializedHandle : IGlobalSubscriber { void CameraInitialized(CameraStateMachineContext.CameraLoadedData data); } public class CameraStateMachineContext { public class CameraLoadedData { public UnityEngine.Camera Camera; public Dictionary SettingsConfigs; public CameraLoadedData(UnityEngine.Camera camera, Dictionary settingsConfigs) { Camera = camera; SettingsConfigs = settingsConfigs; } } public CameraLoadedData cameraLoadedData; [Inject] public IInputService InputService; [Inject] public EventBus.EventBus EventBus; } [Generators.StateMachine(typeof(CameraStateMachineContext), typeof(CameraMode))] public partial class CameraStateMachine { public UnityEngine.Camera Camera => StateMachineContext.cameraLoadedData.Camera; } }