107 lines
3.1 KiB
C#
107 lines
3.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using AibisDream.FixSystem;
|
|
using AibisDream.Framework;
|
|
using AibisDream.Utility;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class ClinicSystem : MonoBehaviour
|
|
{
|
|
[HideInInspector] public CharacterViewer character;
|
|
private Transform _pumpHead;
|
|
private GameObject _coolingScreen;
|
|
|
|
public Vector3 pumpUpPos;
|
|
public Vector3 pumpDownPos;
|
|
public float pumpDuration;
|
|
|
|
private readonly ClinicData _clinicData;
|
|
|
|
private void Awake()
|
|
{
|
|
FixSystemCenter.SystemDic.Register(this);
|
|
GameLoopManager.FixDataContainer.Register(_clinicData);
|
|
|
|
character = transform.GetComponentInChildren<CharacterViewer>();
|
|
character.CharacterChangeEvent += OnCharacterChange;
|
|
|
|
_clinicData.LoadEvent += LoadData;
|
|
|
|
_pumpHead = transform.Find("正图").Find("近景").Find("桌上泵头");
|
|
_coolingScreen = transform.Find("正图").Find("近景").Find("桌面泵机运作时亮灯").gameObject;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
public IEnumerator Indoor(float duration)
|
|
{
|
|
// 加载诊所场景
|
|
gameObject.SetActive(true);
|
|
// 开始界面淡出
|
|
yield return MainUIController.Instance.TVFadeOutSync(duration);
|
|
}
|
|
|
|
public IEnumerator Quit(float duration)
|
|
{
|
|
// 黑屏出现
|
|
yield return MainUIController.Instance.FadeInSync(duration);
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
public void StartTablePump()
|
|
{
|
|
_pumpHead.DOLocalMove(pumpDownPos, pumpDuration).SetLoops(-1, LoopType.Yoyo)
|
|
.SetEase(Ease.Linear);
|
|
// 点亮屏幕
|
|
_coolingScreen.SetActive(true);
|
|
}
|
|
|
|
public void StopTablePump()
|
|
{
|
|
_pumpHead.DOKill();
|
|
_pumpHead.DOLocalMove(pumpUpPos, 0.5f);
|
|
// 熄灭屏幕
|
|
_coolingScreen.SetActive(false);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
character.CharacterChangeEvent -= OnCharacterChange;
|
|
_clinicData.LoadEvent -= LoadData;
|
|
GameLoopManager.FixDataContainer.Unregister<ClinicData>();
|
|
FixSystemCenter.SystemDic.Unregister<ClinicSystem>();
|
|
}
|
|
|
|
private void OnCharacterChange(CharacterData characterData)
|
|
{
|
|
CommonUtil.CopyProperties(characterData, _clinicData);
|
|
}
|
|
}
|
|
|
|
public class ClinicData : IData
|
|
{
|
|
public string characterName;
|
|
public string faceName;
|
|
public string poseName;
|
|
|
|
public event Action<ClinicData> LoadEvent;
|
|
|
|
public void Load()
|
|
{
|
|
LoadEvent?.Invoke(this);
|
|
}
|
|
}
|
|
} |