refactor(卡牌): 将卡牌效果应用逻辑改为直接调用组件方法

移除 HeroAttrsComp 中对 UseItemCard 和 UseAttrCard 的事件监听,改为在 MissionCardComp 中直接获取主角实体并调用对应组件方法。
这样避免事件广播导致非主角实体错误响应,确保卡牌效果仅作用于主角。
具体修改:
- 天赋卡:直接调用 TalComp.addTal
- 属性卡:直接更新全局属性并调用 HeroAttrsComp.recalculateSingleAttr
- 药水卡:直接创建 BuffConf 并调用 HeroAttrsComp.addBuff
- 技能卡:暂时保留事件派发,但后续可考虑类似改造
- 伙伴卡:保留事件派发,因其涉及实体创建
This commit is contained in:
panw
2026-02-03 08:37:27 +08:00
parent d40cb26819
commit 78647eda29
2 changed files with 87 additions and 24 deletions

View File

@@ -79,14 +79,15 @@ export class HeroAttrsComp extends ecs.Comp {
onLoad() {
// 监听升级事件
oops.message.on(GameEvent.CanUpdateLv, this.onLevelUp, this);
oops.message.on(GameEvent.UseItemCard, this.onUseItemCard, this);
oops.message.on(GameEvent.UseAttrCard, this.onUseAttrCard, this);
// 移除卡牌事件监听,改为由 MissionCardComp 直接调用,避免非主角响应
// oops.message.on(GameEvent.UseItemCard, this.onUseItemCard, this);
// oops.message.on(GameEvent.UseAttrCard, this.onUseAttrCard, this);
}
onDestroy() {
oops.message.off(GameEvent.CanUpdateLv, this.onLevelUp, this);
oops.message.off(GameEvent.UseItemCard, this.onUseItemCard, this);
oops.message.off(GameEvent.UseAttrCard, this.onUseAttrCard, this);
// oops.message.off(GameEvent.UseItemCard, this.onUseItemCard, this);
// oops.message.off(GameEvent.UseAttrCard, this.onUseAttrCard, this);
}
onUseAttrCard(event: string, args: any) {