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; [HideInInspector] public SpriteGroupKit characterGroup; private GameObject _coolingScreen; private readonly ClinicData _clinicData = new(); private void Awake() { FixSystemCenter.SystemDic.Register(this); GameLoopManager.FixDataContainer.Register(_clinicData); character = transform.GetComponentInChildren(); character.CharacterChangeEvent += OnCharacterChange; 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) { // 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(); // } // 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 MainUIController.Instance.FadeInSync(duration); gameObject.SetActive(false); } private void OnDestroy() { character.CharacterChangeEvent -= OnCharacterChange; _clinicData.LoadEvent -= LoadData; characterGroup.ChangeEvent -= OnSpriteGroupChange; GameLoopManager.FixDataContainer.Unregister(); FixSystemCenter.SystemDic.Unregister(); CameraKit.Instance.UnRegisterCamera(CameraEnum.Clinic); } private void OnCharacterChange(CharacterData characterData) { CommonUtil.CopyFields(characterData, _clinicData); } private void OnSpriteGroupChange(SpriteGroupData data) { CommonUtil.CopyFields(data, _clinicData); } } public class ClinicData : IData { public string characterName; public string faceName; public string poseName; public bool hasDevice; public bool isShow; public string configKey; public string curState; public bool shown; public event Action LoadEvent; public void Load() { LoadEvent?.Invoke(this); } } }