Files
aibis-dream/Assets/Scripts/FixSystemNew/Clinic/ClinicSystem.cs
T
2025-02-20 00:55:14 +08:00

101 lines
3.0 KiB
C#

using System;
using System.Collections;
using AibisDream.FixSystem;
using AibisDream.Framework;
using AibisDream.Utility;
using Cinemachine;
using UnityEngine;
namespace AibisDream
{
public class ClinicSystem : MonoBehaviour
{
[HideInInspector] public CharacterViewer character;
private GameObject _coolingScreen;
private readonly ClinicData _clinicData = new();
private void Awake()
{
FixSystemCenter.SystemDic.Register(this);
GameLoopManager.FixDataContainer.Register(_clinicData);
character = transform.GetComponentInChildren<CharacterViewer>();
character.CharacterChangeEvent += OnCharacterChange;
_clinicData.LoadEvent += LoadData;
// 注册Camera
var clinicCam = transform.Find("Clinic Camera").GetComponent<ICinemachineCamera>();
var coolingCam = transform.Find("Cooling Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Clinic, clinicCam);
CameraKit.Instance.RegisterCamera(CameraEnum.CoolingMachine, coolingCam);
}
private void LoadData(ClinicData data)
{
StartCoroutine(LoadDataAsync(data));
}
private IEnumerator LoadDataAsync(ClinicData data)
{
yield return character.CharacterInit(data.characterName);
character.SwitchFace(data.faceName);
character.SwitchPose(data.poseName);
if (data.isShow) character.CharacterShow();
if (data.hasDevice)
{
character.AddLinkDevice();
}
else
{
character.RemoveLinkDevice();
}
}
public IEnumerator Indoor(float duration)
{
// 加载诊所场景
gameObject.SetActive(true);
// 开始界面淡出
yield return MainUIController.Instance.TVFadeOutSync(duration);
}
public IEnumerator Quit(float duration)
{
// 黑屏出现
yield return MainUIController.Instance.FadeInSync(duration);
gameObject.SetActive(false);
}
private void OnDestroy()
{
character.CharacterChangeEvent -= OnCharacterChange;
_clinicData.LoadEvent -= LoadData;
GameLoopManager.FixDataContainer.Unregister<ClinicData>();
FixSystemCenter.SystemDic.Unregister<ClinicSystem>();
CameraKit.Instance.UnRegisterCamera(CameraEnum.Clinic);
}
private void OnCharacterChange(CharacterData characterData)
{
CommonUtil.CopyFields(characterData, _clinicData);
}
}
public class ClinicData : IData
{
public string characterName;
public string faceName;
public string poseName;
public bool hasDevice;
public bool isShow;
public event Action<ClinicData> LoadEvent;
public void Load()
{
LoadEvent?.Invoke(this);
}
}
}