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(); 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.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 对外暴露 /// /// 显示泵机UI /// /// 显示 public IEnumerator Show() { gameObject.SetActive(true); yield return transform.DOLocalMove(showPos, showDuration).WaitForCompletion(); } /// /// 隐藏泵机UI /// /// 隐藏 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 } }