90 lines
2.8 KiB
C#
90 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();
|
|
|
|
private void Awake()
|
|
{
|
|
FixSystemCenter.SystemDic.Register(this);
|
|
StorageSystem.Instance.RegisterData(_clinicData);
|
|
|
|
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 OnCharacterChange(CharacterData characterData)
|
|
{
|
|
CommonUtil.CopyFields(characterData, _clinicData);
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |