using System.Collections.Generic; using System.Threading.Tasks; using Sirenix.OdinInspector; using Unity.Cinemachine; namespace DDD { public enum CameraType { None = 0, RestaurantBaseCamera = 1 } public class CameraManager : Singleton, IManager { [ShowInInspector, ReadOnly] private Dictionary _cameraGameObjects = new(); private CinemachineBrain _cinemachineBrain; public void PreInit() { _cinemachineBrain = GetComponent(); } public Task Init() { return Task.CompletedTask;; } public void PostInit() { } public void RegisterCamera(CameraGameObject cameraGameObject) { _cameraGameObjects.TryAdd(cameraGameObject.CameraType, cameraGameObject); } public void UnRegisterCamera(CameraGameObject cameraGameObject) { _cameraGameObjects.Remove(cameraGameObject.CameraType); } public void SwitchCamera(CameraType cameraType, CinemachineBlendDefinition.Styles blendStyle = CinemachineBlendDefinition.Styles.Cut, float blendDuration = 1f) { _cinemachineBrain.DefaultBlend = new CinemachineBlendDefinition(blendStyle, blendDuration); foreach (var item in _cameraGameObjects) { int newPriority = item.Value.CameraType == cameraType ? 10 : 0; item.Value.SetPriority(newPriority); } } public CameraGameObject GetCameraGameObject(CameraType cameraType) => _cameraGameObjects[cameraType]; } }