Browse Source

关卡奖励

181404010226 2 months ago
parent
commit
38957bad55

+ 6 - 0
assets/scripts/Animations/DamageNumberAni.ts

@@ -42,6 +42,12 @@ export class DamageNumberAni extends Component {
      * @param isCritical 是否暴击
      */
     public showDamageNumber(damage: number, worldPosition: Vec3, isCritical: boolean = false) {
+        // 如果伤害为0,显示格挡文字而不是数字0
+        if (damage === 0) {
+            this.showBlockText(worldPosition);
+            return;
+        }
+        
         // 检查预制体引用
         if (!this.damageNumberPrefab) {
             console.error('[DamageNumberAni] DamageNumber预制体引用未设置');

+ 21 - 0
assets/scripts/Animations/MoneyAni.ts

@@ -91,6 +91,13 @@ export class MoneyAni extends Component {
     public playRewardAnimation(coinAmount: number, diamondAmount: number, onComplete?: () => void) {
         console.log(`[MoneyAni] 开始播放奖励动画 - 钞票: ${coinAmount}, 钻石: ${diamondAmount}`);
         
+        // 如果奖励为0,直接返回不播放动画
+        if (coinAmount <= 0 && diamondAmount <= 0) {
+            console.log('[MoneyAni] 奖励为0,跳过动画播放');
+            if (onComplete) onComplete();
+            return;
+        }
+        
         if (!this.canvasNode) {
             console.error('[MoneyAni] Canvas节点未设置,请在编辑器中拖拽Canvas节点到canvasNode属性');
             if (onComplete) onComplete();
@@ -136,6 +143,13 @@ export class MoneyAni extends Component {
             return;
         }
         
+        // 如果钞票数量为0或负数,直接返回不播放动画和音效
+        if (amount <= 0) {
+            console.log('[MoneyAni] 钞票数量为0,跳过钞票动画');
+            if (onComplete) onComplete();
+            return;
+        }
+        
         // 使用装饰器引用的钞票目标节点
         if (!this.coinTargetNode) {
             console.error('[MoneyAni] 钞票目标节点未设置,请在编辑器中拖拽TopBar中的钞票标签节点');
@@ -180,6 +194,13 @@ export class MoneyAni extends Component {
             return;
         }
         
+        // 如果钻石数量为0或负数,直接返回不播放动画和音效
+        if (amount <= 0) {
+            console.log('[MoneyAni] 钻石数量为0,跳过钻石动画');
+            if (onComplete) onComplete();
+            return;
+        }
+        
         // 使用装饰器引用的钻石目标节点
         if (!this.diamondTargetNode) {
             console.error('[MoneyAni] 钻石目标节点未设置,请在编辑器中拖拽TopBar中的钻石标签节点');

+ 1 - 1
assets/scripts/CombatSystem/BallController.ts

@@ -972,7 +972,7 @@ export class BallController extends Component {
             }
 
             // 测试模式:显示详细的防围困信息
-            console.log(`[BallController] 测试模式 - 小球撞击统计: 撞击次数=${hitHistory.length}/${this.antiTrapHitThreshold}, 时间窗口=${this.antiTrapTimeWindow}秒, 方块=${otherNode.name}`);
+           // console.log(`[BallController] 测试模式 - 小球撞击统计: 撞击次数=${hitHistory.length}/${this.antiTrapHitThreshold}, 时间窗口=${this.antiTrapTimeWindow}秒, 方块=${otherNode.name}`);
 
             // 检查是否达到防围困条件
             if (hitHistory.length >= this.antiTrapHitThreshold) {

+ 7 - 5
assets/scripts/CombatSystem/BlockManager.ts

@@ -2507,11 +2507,11 @@ export class BlockManager extends Component {
             const worldPos = new Vec3();
             target.getWorldPosition(worldPos);
             
-            // 加载升级特效动画
-            const path = 'Animation/WeaponBurnAni/shengji/skeleton';
-            resources.load(path, sp.SkeletonData, (err, sData: sp.SkeletonData) => {
-                if (err || !sData) {
-                    console.warn('[BlockManager] 加载升级特效动画失败:', err);
+            // 使用BundleLoader加载升级特效动画
+            const path = 'WeaponBurnAni/shengji';
+            BundleLoader.loadSkeletonData(path).then((sData: sp.SkeletonData) => {
+                if (!sData) {
+                    console.warn('[BlockManager] 加载升级特效动画失败: 资源为空');
                     return;
                 }
                 
@@ -2540,6 +2540,8 @@ export class BlockManager extends Component {
                     console.warn('[BlockManager] 未找到Canvas节点,无法播放升级特效');
                     effectNode.destroy();
                 }
+            }).catch((err) => {
+                console.warn('[BlockManager] 加载升级特效动画失败:', err);
             });
             
         } catch (error) {

+ 5 - 1
assets/scripts/CombatSystem/SkillSelection/SkillManager.ts

@@ -67,8 +67,12 @@ export class SkillManager extends Component {
     public initSkills(skillsData: SkillData[]) {
         this._skills.clear();
         skillsData.forEach(skill => {
-            this._skills.set(skill.id, { ...skill });
+            // 强制将技能等级重置为0,确保每次开始新关卡时技能等级都是0
+            const skillCopy = { ...skill };
+            skillCopy.currentLevel = 0;
+            this._skills.set(skill.id, skillCopy);
         });
+        console.log('[SkillManager] 技能数据已初始化,所有技能等级重置为0');
     }
 
     /**

+ 27 - 1
assets/scripts/Core/BundleLoader.ts

@@ -141,7 +141,33 @@ export class BundleLoader {
      */
     public static async loadSkeletonData(resourcePath: string): Promise<sp.SkeletonData> {
         const instance = BundleLoader.getInstance();
-        return instance.loadAssetFromBundle('Animation', resourcePath, sp.SkeletonData);
+        
+        // 根据资源类型确定正确的加载路径
+        let finalPath: string;
+        
+        // 如果是敌人动画路径(如 EnemyAni/007/007),直接使用
+        if (resourcePath.includes('EnemyAni/') || resourcePath.includes('WeaponTx/')) {
+            finalPath = resourcePath;
+        } 
+        // 如果是武器燃烧动画路径(如 WeaponBurnAni/shengji),需要添加/skeleton
+        else if (resourcePath.includes('WeaponBurnAni/')) {
+            finalPath = resourcePath.endsWith('/skeleton') || resourcePath.endsWith('skeleton') 
+                ? resourcePath 
+                : resourcePath + '/skeleton';
+        }
+        // 其他情况,先尝试直接路径
+        else {
+            finalPath = resourcePath;
+        }
+        
+        console.log(`[BundleLoader] 加载骨骼动画资源: ${resourcePath} -> ${finalPath}`);
+        
+        try {
+            return await instance.loadAssetFromBundle('Animation', finalPath, sp.SkeletonData);
+        } catch (error) {
+            console.error(`[BundleLoader] 骨骼动画加载失败: ${finalPath}`, error);
+            throw error;
+        }
     }
 
     /**

+ 1 - 1
assets/scripts/FourUI/MainSystem/MainUIControlller.ts

@@ -475,7 +475,7 @@ export class MainUIController extends Component {
           MoneyAni.playReward(rewards.money, rewards.diamonds);
         }
       } else {
-        console.log('当前关卡没有奖励或奖励为0');
+        console.log('当前关卡没有奖励或奖励为0,跳过动画播放');
       }
     } catch (error) {
       console.error('播放奖励动画时出错:', error);