NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/Camera/CameraController.cs

139 lines
3.4 KiB
C#

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>();
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<PointerEventData>(EventManager.EventName.Level_OnDrag, _OnDragMove);
EventManager.Instance.Register<PointerEventData>(EventManager.EventName.Level_OnEndDrag, _OnEndDrag);
InputManager.Instance.OnFingersMove += _OnFingersMove;
}
}
private void OnDisable()
{
if (Application.isPlaying)
{
EventManager.Instance.Unregister<PointerEventData>(EventManager.EventName.Level_OnDrag, _OnDragMove);
EventManager.Instance.Unregister<PointerEventData>(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
}