Files
aibis-dream/Assets/Scripts/FixSystemNew/CoolingMachine/CoolingSystem.cs
T
2024-12-24 18:23:42 +00:00

145 lines
3.7 KiB
C#

using System.Collections;
using AibisDream.FixSystem;
using UnityEngine;
using Yarn.Unity;
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();
}
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;
}
#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)
{
// 插入似乎没有太多逻辑?
}
public void Lock()
{
isLocked = true;
// 已锁定的瓶子禁止使用
if (CurBottle)
{
CurBottle.IsBlock = true;
}
_pumpUI.CloseBuckle();
}
public void StartPump()
{
// 进行泵机操作
if (isLocked && CurBottle)
{
// 播放pump动画
_pumpUI.PlayPumpAnime();
// 播放泵机运行对话
// DialogController.Instance.StartDialogNode($"泵机运行_{CurBottle.data.name}");
Debug.Log($"泵机运行_{CurBottle.data.name}");
}
}
[YarnCommand("close_bottle_ui")]
public IEnumerator CloseBottleUI()
{
yield return _bottomUI.Hide();
}
[YarnCommand("close_cooling_system")]
public IEnumerator CloseCoolingSystem()
{
yield return _pumpUI.Hide();
_pumpUI.StopPumpAnime();
_pumpUI.DestroyBottle();
}
[YarnCommand("pull_out_tube")]
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 Lock();
// 点击泵机开关
public void StartPump();
// 冷却液架收回
public IEnumerator CloseBottleUI();
// 冷却系统UI收回
public IEnumerator CloseCoolingSystem();
// 拔管
public IEnumerator PullOutTube();
}
}