using System.Collections.Generic; using UnityEngine; public class TimeRushTipWin : UIBase { [SerializeField] RectTransform tip; [SerializeField] ButtonEx clickBtn; [SerializeField] TextEx awardTipText; [SerializeField] List itemCells = new List(); [SerializeField] PositionTween positionTween; [SerializeField] float waitTime = 3.0f; [SerializeField] float moveDurationTime = 1.0f; // 移动持续时间 [SerializeField] RectTransform startPos; // 初始位置 [SerializeField] RectTransform downPos; // 往下移动位置 [SerializeField] RectTransform upPos; // 往上移动位置 int roundType; int awardType; int awardTypeValue; int awardIndex; float openTime; private enum MoveState { MovingDown, Staying, MovingUp, Finished } MoveState currentState; TimeRushManager manager { get { return TimeRushManager.Instance; } } protected override void InitComponent() { clickBtn.SetListener(() => { if (UIManager.Instance.IsOpened()) { UIManager.Instance.CloseWindow(); } var list = manager.GetTabIDList(); if (list.IsNullOrEmpty()) return; if (!ActLunhuidianTypeConfig.TryGetConfig(roundType, 1, out var config) || !list.Contains(config.ID)) return; UIManager.Instance.OpenWindow(config.ID); }); } protected override void OnPreOpen() { manager.OnNewAwardHaveEvent += OnNewAwardHaveEvent; ResetAnimation(); } protected override void OnPreClose() { manager.OnNewAwardHaveEvent -= OnNewAwardHaveEvent; } void LateUpdate() { if (currentState == MoveState.Staying) { if (Time.time - openTime > waitTime) { currentState = MoveState.MovingUp; positionTween.reversal = true; positionTween.from = downPos.anchoredPosition; positionTween.to = upPos.anchoredPosition; positionTween.duration = moveDurationTime; positionTween.Play(OnMoveUpComplete); } } } private void OnMoveDownComplete() { currentState = MoveState.Staying; openTime = Time.time; } private void OnMoveUpComplete() { currentState = MoveState.Finished; if (UIManager.Instance.IsOpened()) { UIManager.Instance.CloseWindow(); } } private void Display() { roundType = manager.newRoundType; awardType = manager.newAwardType; awardTypeValue = manager.newAwardTypeValue; awardIndex = manager.newAwardIndex; if (!manager.TryGetOperationInfo(out var act) || !act.TryGetRoundInfoByIndex(roundType, awardIndex, out var award, out int listIndex) || award.AwardItemList == null) return; awardTipText.text = Language.Get($"TimeRushTaskTitle_{awardType}_{awardTypeValue}", award.NeedValue); for (int i = 0; i < itemCells.Count; i++) { var itemBaisc = itemCells[i]; if (i < award.AwardItemList.Length) { var itemInfo = award.AwardItemList[i]; itemBaisc.SetActive(true); itemBaisc.Init(new ItemCellModel((int)itemInfo.ItemID, false, itemInfo.ItemCount)); } else { itemBaisc.SetActive(false); } } } private void OnNewAwardHaveEvent() { ResetAnimation(); } private void ResetAnimation() { currentState = MoveState.MovingDown; openTime = Time.time; tip.anchoredPosition = startPos.anchoredPosition; positionTween.reversal = false; positionTween.from = startPos.anchoredPosition; positionTween.to = downPos.anchoredPosition; positionTween.duration = moveDurationTime; positionTween.Play(OnMoveDownComplete); Display(); } }