using System.Linq.Expressions; using AibisDream.FixSystem; using AibisDream.Framework; using AibisDream.Kit; using Cinemachine; using UnityEngine; using UnityEngine.Playables; using Yarn.Unity; namespace AibisDream { public class OpenSystem : MonoBehaviour { public DeepInClock deepInClock; public PlayableDirector fadeInPlayable; public GameObject fadeInAnima; public SpriteDeepIn deepIn; public LightRoom lightRoom; public GameObject screen; public CuttingManager cuttingManager; public SpriteRenderer cutEmoSpriteRenderer; public SpriteRenderer cutMemorySpriteRenderer; public SpriteRenderer cutLogicSpriteRenderer; private bool isCuttingMode = false; private void Awake() { // 注册 FixSystemCenter.SystemDic.Register(this); var virtualCam = transform.Find("Op Camera").GetComponent(); CameraKit.Instance.RegisterCamera(CameraEnum.Op, virtualCam); var virtualCam1 = transform.Find("Cut Emo Camera").GetComponent(); var virtualCam2 = transform.Find("Cut Memory Camera").GetComponent(); var virtualCam3 = transform.Find("Cut Logic Camera").GetComponent(); var virtualCam4 = transform.Find("Cut Emo Deep Camera").GetComponent(); CameraKit.Instance.RegisterCamera(CameraEnum.CutEmo, virtualCam1); CameraKit.Instance.RegisterCamera(CameraEnum.CutMemory, virtualCam2); CameraKit.Instance.RegisterCamera(CameraEnum.CutLogic, virtualCam3); CameraKit.Instance.RegisterCamera(CameraEnum.CutEmoDeep, virtualCam4); // 组装 deepInClock.OnClockReached += PlayFadeIn; fadeInPlayable.stopped += PlayDeepIn; deepIn.OnFinished += Finished; } public void Update() { if (Input.GetKeyDown(KeyCode.K)) { EnableClock(); } } private void OnDestroy() { deepInClock.OnClockReached -= PlayFadeIn; fadeInPlayable.stopped -= PlayDeepIn; deepIn.OnFinished -= Finished; } public void OpenLightRoom() { screen.SetActive(false); lightRoom.gameObject.SetActive(true); } public void EnableClock() { lightRoom.gameObject.SetActive(false); deepInClock.Enable(); } private void PlayFadeIn() { fadeInAnima.SetActive(true); fadeInPlayable.Play(); } private void PlayDeepIn(PlayableDirector director) { fadeInAnima.SetActive(false); deepIn.gameObject.SetActive(true); deepIn.Play(); } private void Finished() { DialogController.Instance.StartDialogNode("DeepInEnd"); } // 添加切割完成的回调方法 } public static class OpenYarnCommand { private static OpenSystem OpenSystem => FixSystemCenter.SystemDic.Get(); [YarnCommand("enable_clock")] public static void EnableClock() { OpenSystem.EnableClock(); } [YarnCommand("open_light_room")] public static void OpenLightRoom() { OpenSystem.OpenLightRoom(); } } }