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

60 lines
1.7 KiB
C#
Raw Normal View History

2025-04-28 15:26:51 +08:00
using GameWrapper;
using UnityEngine;
/// <summary>
/// 相机逻辑接口 定义在GameWrapper中 实现放在Gameplay命名空间
/// </summary>
public interface ICameraLogic
{
void Initialize();
void Cleanup();
void Update();
void AdjustSelf();
void KeepCenter(Vector3 centerPos);
void CampKeepCenter(Vector3 centerPos);
void InitializeCameraPosition(Vector3 targetPosition, CameraInfoData cameraInfo = null);
void SetCameraFOVSize(float initialFOV);
void RecordStartPos();
void ResetToStartPos(float during = 0.3f);
}
/// <summary>
/// 相机逻辑工厂
/// </summary>
public static class CameraLogicFactory
{
/// <summary>
/// 委托定义 创建CameraLogic的工厂方法
/// </summary>
public delegate ICameraLogic CreateCameraLogicDelegate(CameraData cameraData);
/// <summary>
/// 工厂方法 默认返回null
/// </summary>
private static CreateCameraLogicDelegate _factoryMethod = null;
/// <summary>
/// 注册相机逻辑工厂方法
/// </summary>
public static void RegisterFactory(CreateCameraLogicDelegate factoryMethod)
{
_factoryMethod = factoryMethod;
Debug.Log("Registered CameraLogic factory method");
}
/// <summary>
/// 创建相机逻辑实例
/// </summary>
/// <param name="cameraData">相机数据</param>
/// <returns>相机逻辑实例,如果未注册工厂方法则返回null</returns>
public static ICameraLogic CreateCameraLogic(CameraData cameraData)
{
if (_factoryMethod == null)
{
Debug.LogError("CameraLogic factory method not registered!");
return null;
}
return _factoryMethod(cameraData);
}
}