Browse Source

跳关解决

181404010226 1 month ago
parent
commit
a2948ec5a0

+ 13 - 2
assets/scripts/CombatSystem/BlockSelection/GameBlockSelection.ts

@@ -13,6 +13,7 @@ import { AnalyticsManager, BlockSelectionClickProperties } from '../../Utils/Ana
 
 import EventBus, { GameEvents } from '../../Core/EventBus';
 import { NewbieGuideManager } from '../../Core/NewbieGuideManager';
+import { SaveDataManager } from '../../LevelSystem/SaveDataManager';
 import { InGameManager } from '../../LevelSystem/IN_game';
 const { ccclass, property } = _decorator;
 
@@ -277,7 +278,7 @@ export class GameBlockSelection extends Component {
     // 引导期间按钮原始颜色缓存
     private originalButtonColors: Map<Node, Color> = new Map();
 
-    // 引导期禁用颜色(HEX: 4D4545)
+    // 引导期禁用颜色置灰(HEX: 4D4545)
     private readonly GUIDE_DISABLED_COLOR: Color = new Color(0x4D, 0x45, 0x45, 255);
 
     onEnable() {
@@ -821,7 +822,17 @@ export class GameBlockSelection extends Component {
     }
 
     private updateGuideButtonStates = () => {
-        const restrict = this.isGuideRestrictActive();
+        // 每关开始时检测:第一关禁用按钮,其它关卡不禁用
+        let restrict = false;
+        try {
+            const sdm = SaveDataManager.getInstance();
+            const currentLevel = sdm ? sdm.getCurrentLevel() : 1;
+            restrict = currentLevel === 1;
+        } catch (e) {
+            // 获取关卡失败时默认不禁用
+            restrict = false;
+        }
+
         this.applyGuideDisabledVisual(this.addCoinButton, restrict);
         this.applyGuideDisabledVisual(this.refreshButton, restrict);
     };

+ 8 - 4
assets/scripts/LevelSystem/GameManager.ts

@@ -590,12 +590,16 @@ export class GameManager extends Component {
         const mainUIController = this.mainUI.getComponent('MainUIController' as any);
         
         if (mainUIController) {
-            // 统一由主界面播放奖励动画(含返回与动画)
-            if (typeof (mainUIController as any).onReturnToMainUIWithReward === 'function') {
-                console.log('[GameManager] 调用返回主界面并播放奖励动画方法');
+            // 根据游戏结果决定是否播放奖励动画
+            const inGameManagerForUI = this.getInGameManager();
+            const currentStateForUI = inGameManagerForUI?.getCurrentState();
+            const isSuccessForUI = currentStateForUI === GameState.SUCCESS;
+
+            if (isSuccessForUI && typeof (mainUIController as any).onReturnToMainUIWithReward === 'function') {
+                console.log('[GameManager] 游戏胜利,调用返回主界面并播放奖励动画方法');
                 (mainUIController as any).onReturnToMainUIWithReward();
             } else if (typeof (mainUIController as any).onReturnToMainUI === 'function') {
-                console.warn('[GameManager] 未找到带奖励方法,回退到普通返回');
+                console.log('[GameManager] 非胜利或无奖励方法,调用普通返回主界面');
                 (mainUIController as any).onReturnToMainUI();
             } else {
                 console.warn('[GameManager] 未找到返回主界面方法,使用兜底逻辑');