172 lines
4.6 KiB
C#
172 lines
4.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using AibisDream.FixSystem;
|
|
using Cinemachine;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.Framework
|
|
{
|
|
public class CoolingSystem : MonoBehaviour, ICoolingSystem
|
|
{
|
|
#region 引用
|
|
|
|
private PumpController _pumpUI;
|
|
private BottleShelf _bottomUI;
|
|
private TubeController _tubeUI;
|
|
|
|
#endregion
|
|
|
|
#region 状态
|
|
|
|
public bool isLocked;
|
|
|
|
private CoolingBottle CurBottle => _pumpUI.bottleSlot.GetCurBottle();
|
|
|
|
#endregion
|
|
|
|
private void Awake()
|
|
{
|
|
FixSystemCenter.SystemDic.Register(this);
|
|
InitRefs();
|
|
|
|
// 注册相机
|
|
var virtualCam = transform.Find("Cooling Camera").GetComponent<ICinemachineCamera>();
|
|
CameraKit.Instance.RegisterCamera(FixState.CoolingMachine, virtualCam);
|
|
}
|
|
|
|
private void InitRefs()
|
|
{
|
|
_pumpUI = transform.Find("Pump Part").GetComponent<PumpController>();
|
|
_bottomUI = transform.Find("Bottom Part").GetComponent<BottleShelf>();
|
|
_tubeUI = transform.Find("Tube Part").GetComponent<TubeController>();
|
|
|
|
isLocked = true;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
CameraKit.Instance.UnRegisterCamera(FixState.CoolingMachine);
|
|
}
|
|
|
|
#region 对外开放
|
|
|
|
public IEnumerator OpenCoolingSystem()
|
|
{
|
|
yield return _pumpUI.Show();
|
|
}
|
|
|
|
public IEnumerator LinkTube()
|
|
{
|
|
// 播放插线动画,完成后自动关闭
|
|
yield return _tubeUI.PlayLinkAnime();
|
|
}
|
|
|
|
public IEnumerator OpenBottleUI()
|
|
{
|
|
yield return _bottomUI.Show();
|
|
}
|
|
|
|
public void Unlock()
|
|
{
|
|
isLocked = false;
|
|
if (CurBottle)
|
|
{
|
|
CurBottle.IsBlock = false;
|
|
}
|
|
_pumpUI.OpenBuckle();
|
|
}
|
|
|
|
public void InsertBottle(CoolingBottle bottle)
|
|
{
|
|
// 设置当前瓶子名称
|
|
DialogController.Instance.SetVariable("$curBottleName", bottle.data.name);
|
|
// 触发插入对话
|
|
DialogController.Instance.StartDialogNode("插入冷却液");
|
|
}
|
|
|
|
public void RemoveBottle()
|
|
{
|
|
DialogController.Instance.SetVariable("$curBottleName", "");
|
|
}
|
|
|
|
public void Lock()
|
|
{
|
|
isLocked = true;
|
|
// 已锁定的瓶子禁止使用
|
|
if (CurBottle)
|
|
{
|
|
CurBottle.IsBlock = true;
|
|
}
|
|
_pumpUI.CloseBuckle();
|
|
}
|
|
|
|
public void StartPump()
|
|
{
|
|
// 进行泵机操作
|
|
if (isLocked && CurBottle)
|
|
{
|
|
// 播放pump动画
|
|
_pumpUI.PlayPumpAnime();
|
|
var clinicSystem = FixSystemCenter.SystemDic.Get<ClinicSystem>();
|
|
clinicSystem.StartTablePump();
|
|
// 播放泵机运行对话
|
|
DialogController.Instance.StartDialogNode("泵机运行");
|
|
}
|
|
}
|
|
|
|
public IEnumerator CloseBottleUI()
|
|
{
|
|
yield return _bottomUI.Hide();
|
|
}
|
|
|
|
public IEnumerator CloseCoolingSystem()
|
|
{
|
|
yield return _pumpUI.Hide();
|
|
}
|
|
|
|
public void StopPump()
|
|
{
|
|
// 冷却液界面
|
|
_pumpUI.StopPumpAnime();
|
|
_pumpUI.DestroyBottle();
|
|
// 诊所界面
|
|
var clinicSystem = FixSystemCenter.SystemDic.Get<ClinicSystem>();
|
|
clinicSystem.StopTablePump();
|
|
}
|
|
|
|
public IEnumerator PullOutTube()
|
|
{
|
|
yield return _tubeUI.PlayPullOutAnime();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
public interface ICoolingSystem
|
|
{
|
|
// 打开冷却系统UI
|
|
public IEnumerator OpenCoolingSystem();
|
|
// 插管
|
|
public IEnumerator LinkTube();
|
|
// 打开左侧冷却液界面
|
|
public IEnumerator OpenBottleUI();
|
|
// 打开卡扣
|
|
public void Unlock();
|
|
// 插入冷却液瓶子
|
|
public void InsertBottle(CoolingBottle bottle);
|
|
// 移出冷却液瓶子
|
|
public void RemoveBottle();
|
|
// 关闭卡扣
|
|
public void Lock();
|
|
// 点击泵机开关
|
|
public void StartPump();
|
|
// 冷却液架收回
|
|
public IEnumerator CloseBottleUI();
|
|
// 冷却系统UI收回
|
|
public IEnumerator CloseCoolingSystem();
|
|
// 拔管
|
|
public IEnumerator PullOutTube();
|
|
// 停止泵机
|
|
public void StopPump();
|
|
}
|
|
} |