113 lines
3.5 KiB
C#
113 lines
3.5 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;
|
|
[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<CharacterViewer>();
|
|
character.CharacterChangeEvent += OnCharacterChange;
|
|
|
|
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)
|
|
{
|
|
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.groupName;
|
|
characterGroup.InstantiateByConfig();
|
|
characterGroup.SwitchState(data.state);
|
|
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<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 characterName;
|
|
public string faceName;
|
|
public string poseName;
|
|
public bool hasDevice;
|
|
public bool isShow;
|
|
|
|
public string groupName;
|
|
public string state;
|
|
public bool shown;
|
|
|
|
public event Action<ClinicData> LoadEvent;
|
|
|
|
public void Load()
|
|
{
|
|
LoadEvent?.Invoke(this);
|
|
}
|
|
}
|
|
} |