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 SpriteGroupKit characterGroup; private GameObject _coolingScreen; private readonly ClinicData _clinicData = new(); private void Awake() { FixSystemCenter.SystemDic.Register(this); StorageSystem.Instance.RegisterData(_clinicData); characterGroup = transform.GetComponentInChildren(); characterGroup.ChangeEvent += OnSpriteGroupChange; _clinicData.LoadEvent += LoadData; // 注册Camera var clinicCam = transform.Find("Clinic Camera").GetComponent(); var coolingCam = transform.Find("Cooling Camera").GetComponent(); 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) { // SpriteGroup加载 characterGroup.config.key = data.configKey; yield return characterGroup.InstantiateByConfigAsync(); characterGroup.SwitchState(data.curState); yield return characterGroup.Fade(data.shown); } public IEnumerator Quit(float duration) { // 黑屏出现 yield return UIManager.Instance.GetPanel().FadeInAsync(duration); gameObject.SetActive(false); } private void OnDestroy() { _clinicData.LoadEvent -= LoadData; characterGroup.ChangeEvent -= OnSpriteGroupChange; StorageSystem.Instance.UnregisterData(); FixSystemCenter.SystemDic.Unregister(); CameraKit.Instance.UnRegisterCamera(CameraEnum.Clinic); } private void OnSpriteGroupChange(SpriteGroupData data) { CommonUtil.CopyFields(data, _clinicData); } } public class ClinicData : IData { public string configKey; public string curState; public bool shown; public event Action LoadEvent; public IEnumerator Load() { LoadEvent?.Invoke(this); yield break; } } }