Files
aibis-dream/Assets/Scripts/FixSystemNew/Open/OpenSystem.cs
T
2025-05-14 14:54:36 +08:00

96 lines
2.4 KiB
C#

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;
private void Awake()
{
// 注册
FixSystemCenter.SystemDic.Register(this);
var virtualCam = transform.GetComponentInChildren<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Op, virtualCam);
// 组装
deepInClock.OnClockReached += PlayFadeIn;
fadeInPlayable.stopped += PlayDeepIn;
deepIn.OnFinished += Finished;
}
private 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<OpenSystem>();
[YarnCommand("enable_clock")]
public static void EnableClock()
{
OpenSystem.EnableClock();
}
[YarnCommand("open_light_room")]
public static void OpenLightRoom()
{
OpenSystem.OpenLightRoom();
}
}
}