Files
aibis-dream/Assets/Scripts/FixSystemNew/Clinic/ClinicSystem.cs
T
2025-06-05 16:12:17 +08:00

88 lines
2.8 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 SpriteGroupKit characterGroup;
private GameObject _coolingScreen;
private readonly ClinicData _clinicData = new();
[HideInInspector] public BubbleSlotGroup bubbleSlotGroup;
private void Awake()
{
FixSystemCenter.SystemDic.Register(this);
StorageSystem.Instance.RegisterData(_clinicData);
bubbleSlotGroup = transform.Find("Bubble Slot Group").GetComponent<BubbleSlotGroup>();
characterGroup = transform.GetComponentInChildren<SpriteGroupKit>();
characterGroup.ChangeEvent += OnSpriteGroupChange;
_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)
{
// 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<PlayToolPanel>().FadeInAsync(duration);
gameObject.SetActive(false);
}
private void OnDestroy()
{
_clinicData.LoadEvent -= LoadData;
characterGroup.ChangeEvent -= OnSpriteGroupChange;
StorageSystem.Instance.UnregisterData<ClinicData>();
FixSystemCenter.SystemDic.Unregister<ClinicSystem>();
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<ClinicData> LoadEvent;
public IEnumerator Load()
{
LoadEvent?.Invoke(this);
yield break;
}
}
}