using Framework; using UnityEngine; using UnityEngine.EventSystems; [ExecuteAlways] public class CameraController : MonoBehaviour { public static CameraController Instance => _instance; public static CameraData Data => Instance?.cameraData; public CameraData CameraData => cameraData; public Camera MainCamera => cameraData?.MainCamera; private CameraData cameraData; private ICameraLogic cameraLogic; private static CameraController _instance; #region MainLife private void Awake() { _instance = this; cameraData = gameObject.AddComponent(); cameraData.InitializeCamera(); cameraLogic = CameraLogicFactory.CreateCameraLogic(cameraData); if (cameraLogic == null) { Debug.LogError("Failed to create camera logic through factory"); } } private void OnEnable() { if (Application.isPlaying) { //InputManager.Instance.OnFingerMove += OnFingerMove2; EventManager.Instance.Register(EventManager.EventName.Level_OnDrag, _OnDragMove); EventManager.Instance.Register(EventManager.EventName.Level_OnEndDrag, _OnEndDrag); InputManager.Instance.OnFingersMove += _OnFingersMove; } } private void OnDisable() { if (Application.isPlaying) { EventManager.Instance.Unregister(EventManager.EventName.Level_OnDrag, _OnDragMove); EventManager.Instance.Unregister(EventManager.EventName.Level_OnEndDrag, _OnEndDrag); if (InputManager.Instance == null) return; InputManager.Instance.OnFingersMove -= _OnFingersMove; } } private void OnDestroy() { if (_instance == this) { _instance = null; } } private void Update() { if (cameraLogic != null) { cameraLogic.Update(); } } private void _OnFingersMove(float delta) { cameraLogic?.OnFingersMove(delta); } private void _OnEndDrag(PointerEventData pointerData) { cameraLogic?.OnEndDrag(pointerData); } private void _OnDragMove(PointerEventData pointerData) { cameraLogic?.OnDragMove(pointerData); } #endregion #region 接口 public void KeepCenter(Vector3 centerPos) { cameraLogic?.KeepCenter(centerPos); } public void CampKeepCenter(Vector3 centerPos) { cameraLogic?.CampKeepCenter(centerPos); } public void InitializeCameraPosition(Vector3 targetPosition, MapData.CameraInfo cameraInfo = null) { cameraLogic?.InitializeCameraPosition(targetPosition, cameraInfo); } public void AdjustSelf() { cameraLogic?.AdjustSelf(); } public void SetCameraFOVSize(float initialFOV) { cameraLogic?.SetCameraFOVSize(initialFOV); } public void RecordStartPos() { cameraLogic?.RecordStartPos(); } public void ResetToStartPos(float during = 0.3f) { cameraLogic?.ResetToStartPos(during); } #endregion #region 静态访问属性 public static bool FingerMoveEnable { get => Data?.FingerMoveEnable ?? true; set { if (Data != null) Data.FingerMoveEnable = value; } } #endregion }