From 2a9bc6e5b08ab61ca66f8fff73e8baea34e04316 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期三, 11 二月 2026 20:56:33 +0800
Subject: [PATCH] 461 限时冲刺-客户端 任务完成提示

---
 Main/System/TimeRush/TimeRushTipWin.cs      |  140 ++++++++++++++++++++++++++++++++++++++++++++++
 Main/System/TimeRush/TimeRushTipWin.cs.meta |   11 +++
 Main/System/TimeRush/TimeRushManager.cs     |   12 ++-
 3 files changed, 158 insertions(+), 5 deletions(-)

diff --git a/Main/System/TimeRush/TimeRushManager.cs b/Main/System/TimeRush/TimeRushManager.cs
index 5fce2e5..32e850c 100644
--- a/Main/System/TimeRush/TimeRushManager.cs
+++ b/Main/System/TimeRush/TimeRushManager.cs
@@ -248,6 +248,8 @@
 
     // <杞洖绫诲瀷, 涓婁竴娆$殑CurValue>
     public Dictionary<int, int> lastCurValueDict = new Dictionary<int, int>();
+
+    public event Action OnNewAwardHaveEvent;
     public void CheckNewAwardHave(int roundType, int curRound, int curValue)
     {
         if (lastCurRoundDict.ContainsKey(roundType) && lastCurValueDict.ContainsKey(roundType))
@@ -276,11 +278,11 @@
                             newAwardType = round.AwardType;
                             newAwardTypeValue = (int)round.AwardTypeValue;
                             newAwardIndex = Award.AwardIndex;
-                            // if (!DTC0403_tagPlayerLoginLoadOK.neverLoginOk && !WindowCenter.Instance.IsOpen<CycleHallAchievementTipWin>())
-                            // {
-                            //     WindowCenter.Instance.Open<CycleHallAchievementTipWin>();
-                            // }
-                            // UpdateNewAwardHave?.Invoke();
+                            if (!UIManager.Instance.IsOpened<TimeRushTipWin>())
+                            {
+                                UIManager.Instance.OpenWindow<TimeRushTipWin>();
+                            }
+                            OnNewAwardHaveEvent?.Invoke();
                         }
                     }
                 }
diff --git a/Main/System/TimeRush/TimeRushTipWin.cs b/Main/System/TimeRush/TimeRushTipWin.cs
new file mode 100644
index 0000000..129df72
--- /dev/null
+++ b/Main/System/TimeRush/TimeRushTipWin.cs
@@ -0,0 +1,140 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class TimeRushTipWin : UIBase
+{
+    [SerializeField] RectTransform tip;
+    [SerializeField] ButtonEx clickBtn;
+    [SerializeField] TextEx awardTipText;
+    [SerializeField] List<ItemCell> itemCells = new List<ItemCell>();
+    [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<TimeRushWin>())
+            {
+                UIManager.Instance.CloseWindow<TimeRushWin>();
+            }
+            var list = manager.GetTabIDList();
+            if (list.IsNullOrEmpty())
+                return;
+            if (!ActLunhuidianTypeConfig.TryGetConfig(roundType, 1, out var config) || !list.Contains(config.ID))
+                return;
+            UIManager.Instance.OpenWindow<TimeRushWin>(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<TimeRushTipWin>())
+        {
+            UIManager.Instance.CloseWindow<TimeRushTipWin>();
+        }
+    }
+
+    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();
+    }
+}
diff --git a/Main/System/TimeRush/TimeRushTipWin.cs.meta b/Main/System/TimeRush/TimeRushTipWin.cs.meta
new file mode 100644
index 0000000..0a032c9
--- /dev/null
+++ b/Main/System/TimeRush/TimeRushTipWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f5d65c473483e9a468f8c7a9866199ba
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0