Files
aibis-dream/Assets/Scripts/FixSystemNew/CoolingMachine/PumpController.cs
T
2024-12-26 03:20:56 +08:00

168 lines
4.7 KiB
C#

using System.Collections;
using AibisDream.Framework;
using DG.Tweening;
using UnityEngine;
namespace AibisDream.FixSystem
{
public class PumpController : MonoBehaviour
{
[Header("整体位置")] public Vector3 hidePos;
public Vector3 showPos;
public Vector3 topBuckleUnlockPos;
public Vector3 leftBuckleUnlockPos;
public Vector3 rightBuckleUnlockPos;
public Vector3 topBuckleLockPos;
public Vector3 leftBuckleLockPos;
public Vector3 rightBuckleLockPos;
public Vector3 pumpUpPos;
public Vector3 pumpDownPos;
[Header("移动用时")] public float showDuration;
public float buckleDuration;
public float pumpDuration;
#region 组件索引
private CoolingSystem _coolingSystem;
private SpriteButton _lockButton;
private SpriteButton _pumpButton;
private Transform _topBuckle;
private Transform _leftBuckle;
private Transform _rightBuckle;
[HideInInspector] public BottleSlot bottleSlot;
private GameObject _lockBox;
private Transform _pumpHead;
private GameObject _coolingScreen;
#endregion
private void Awake()
{
InitRefs();
transform.localPosition = hidePos;
}
private void InitRefs()
{
// 初始化引用
_coolingSystem = GetComponentInParent<CoolingSystem>();
var buckleGroup = transform.Find("按键卡扣组");
_lockButton = new SpriteButton(buckleGroup.Find("Lock Button").gameObject);
_pumpButton = new SpriteButton(buckleGroup.Find("Pump Button").gameObject);
_lockButton.OnButtonDown += LockButtonDown;
_pumpButton.OnButtonDown += PumpButtonDown;
_topBuckle = buckleGroup.Find("上下卡扣");
_leftBuckle = buckleGroup.Find("左卡扣");
_rightBuckle = buckleGroup.Find("右卡扣");
_lockBox = buckleGroup.Find("锁定占位").gameObject;
_lockBox.SetActive(true);
var pumpGroup = transform.Find("泵机组");
_pumpHead = pumpGroup.Find("泵头");
_coolingScreen = pumpGroup.Find("泵机运作时亮灯").gameObject;
bottleSlot = GetComponentInChildren<BottleSlot>();
bottleSlot.InsertSlotEvent += _coolingSystem.InsertBottle;
bottleSlot.RemoveSlotEvent += _coolingSystem.RemoveBottle;
}
#region 按钮
private void LockButtonDown()
{
if (_coolingSystem.isLocked)
{
_coolingSystem.Unlock();
}
else
{
_coolingSystem.Lock();
}
}
private void PumpButtonDown()
{
_coolingSystem.StartPump();
}
private void Update()
{
_lockButton.CheckButtonClick();
_pumpButton.CheckButtonClick();
}
#endregion
#region 对外暴露
/// <summary>
/// 显示泵机UI
/// </summary>
/// <returns>显示</returns>
public IEnumerator Show()
{
gameObject.SetActive(true);
yield return transform.DOLocalMove(showPos, showDuration).WaitForCompletion();
}
/// <summary>
/// 隐藏泵机UI
/// </summary>
/// <returns>隐藏</returns>
public IEnumerator Hide()
{
yield return transform.DOLocalMove(hidePos, showDuration).WaitForCompletion();
gameObject.SetActive(false);
}
public void OpenBuckle()
{
_lockBox.SetActive(false);
_topBuckle.DOLocalMove(topBuckleUnlockPos, buckleDuration);
_leftBuckle.DOLocalMove(leftBuckleUnlockPos, buckleDuration);
_rightBuckle.DOLocalMove(rightBuckleUnlockPos, buckleDuration);
}
public void CloseBuckle()
{
_lockBox.SetActive(true);
_topBuckle.DOLocalMove(topBuckleLockPos, buckleDuration);
_leftBuckle.DOLocalMove(leftBuckleLockPos, buckleDuration);
_rightBuckle.DOLocalMove(rightBuckleLockPos, buckleDuration);
}
public void PlayPumpAnime()
{
_pumpHead.DOLocalMove(pumpDownPos, pumpDuration).SetLoops(-1, LoopType.Yoyo)
.SetEase(Ease.Linear);
_coolingScreen.SetActive(true);
}
public void StopPumpAnime()
{
_pumpHead.DOKill();
_pumpHead.localPosition = pumpUpPos;
_coolingScreen.SetActive(false);
}
public void DestroyBottle()
{
bottleSlot.DestroyBottle();
}
#endregion
}
}