105 lines
3.6 KiB
C#
105 lines
3.6 KiB
C#
using UnityEngine;
|
|
using AibisDream;
|
|
using AibisDream.FixSystem;
|
|
using Cinemachine;
|
|
using AibisDream.Framework;
|
|
using AibisDream.Kit;
|
|
using UnityEditor.Localization.Plugins.XLIFF.V12;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class CuttingManager : MonoBehaviour
|
|
{
|
|
[Header("切割组件")]
|
|
public GameObject gearFollowerPrefab;
|
|
private GearFollower gearFollower;
|
|
private bool isCuttingMode = false;
|
|
private BodyModule _targetModule;
|
|
private SpriteRenderer _targetSpriteRenderer;
|
|
|
|
private void Awake()
|
|
{
|
|
// 注册
|
|
FixSystemCenter.SystemDic.Register(this);
|
|
var virtualCam1 = transform.Find("Cut Emo Camera").GetComponent<ICinemachineCamera>();
|
|
var virtualCam2 = transform.Find("Cut Memory Camera").GetComponent<ICinemachineCamera>();
|
|
var virtualCam3 = transform.Find("Cut Logic Camera").GetComponent<ICinemachineCamera>();
|
|
var virtualCam4 = transform.Find("Cut Emo Deep Camera").GetComponent<ICinemachineCamera>();
|
|
var virtualCam5 = transform.Find("Cut Memory Deep Camera").GetComponent<ICinemachineCamera>();
|
|
var virtualCam6 = transform.Find("Cut Logic Deep Camera").GetComponent<ICinemachineCamera>();
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutEmo, virtualCam1);
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutMemory, virtualCam2);
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutLogic, virtualCam3);
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutEmoDeep, virtualCam4);
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutMemoryDeep, virtualCam5);
|
|
CameraKit.Instance.RegisterCamera(CameraEnum.CutLogicDeep, virtualCam6);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (isCuttingMode && gearFollower != null)
|
|
{
|
|
gearFollower.GearUpdate();
|
|
}
|
|
}
|
|
|
|
public void StartCutting(BodyModule targetModule)
|
|
{
|
|
// 检查参数
|
|
if (targetModule == null)
|
|
{
|
|
Debug.LogError("targetModule 为空");
|
|
return;
|
|
}
|
|
|
|
// 保存目标模块
|
|
_targetModule = targetModule;
|
|
|
|
// 获取目标精灵渲染器
|
|
_targetSpriteRenderer = targetModule.GetCutSpriteRenderer();
|
|
if (_targetSpriteRenderer == null)
|
|
{
|
|
Debug.LogError("targetSprite 为空");
|
|
return;
|
|
}
|
|
|
|
// 停止之前的切割
|
|
StopCutting();
|
|
|
|
// 设置切割模式
|
|
isCuttingMode = true;
|
|
|
|
// 创建GearFollower
|
|
Vector3 SpawnPosition = new Vector3(Screen.width / 2f, Screen.height / 4f, 0);
|
|
GameObject gearFollowerObj = Instantiate(gearFollowerPrefab, SpawnPosition, Quaternion.identity);
|
|
gearFollower = gearFollowerObj.GetComponent<GearFollower>();
|
|
gearFollower.Init(_targetSpriteRenderer);
|
|
}
|
|
|
|
public void OnCutComplete()
|
|
{
|
|
isCuttingMode = false;
|
|
if (gearFollower != null)
|
|
{
|
|
gearFollower.FinishCutting();
|
|
}
|
|
}
|
|
public void UpdateModule()
|
|
{
|
|
if (_targetModule != null)
|
|
{
|
|
_targetModule.OnCuttingDown();
|
|
}
|
|
}
|
|
|
|
public void StopCutting()
|
|
{
|
|
isCuttingMode = false;
|
|
if (gearFollower != null)
|
|
{
|
|
Destroy(gearFollower.gameObject);
|
|
gearFollower = null;
|
|
}
|
|
}
|
|
}
|
|
} |