168 lines
4.7 KiB
C#
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
|
|
}
|
|
} |