feat(护盾系统): 完善护盾功能并添加吸收提示

- 在GameSet.ts中添加shield类型提示
- HeroViewComp新增shield_tip方法显示护盾吸收值
- 修改HeroAttrsComp移除护盾值上限限制
- TooltipCom添加shield类型提示处理
- 调整SACastSystem中治疗和护盾技能计算方式
- HeroAtkSystem优化护盾吸收逻辑并添加吸收提示
This commit is contained in:
walkpan
2025-12-31 23:36:55 +08:00
parent f858580b34
commit 0ec1dcfd0d
6 changed files with 41 additions and 14 deletions

View File

@@ -36,7 +36,7 @@ interface FinalData {
@ecs.register('HeroAtkSystem')
export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
private debugMode: boolean = false; // 是否启用调试模式
private debugMode: boolean = true; // 是否启用调试模式
/**
* 过滤器:处理拥有伤害队列的实体
@@ -164,8 +164,13 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
}
if (this.debugMode) console.log("[HeroAtkSystem] after crit",damage)
// 护盾吸收
damage =Math.floor(this.absorbShield(TAttrsComp, damage))
const shieldResult = this.absorbShield(TAttrsComp, damage);
damage = shieldResult.remainingDamage;
if (this.debugMode) console.log("[HeroAtkSystem] after shield",damage)
// 显示护盾吸收飘字
if (shieldResult.absorbedDamage > 0 && targetView) {
targetView.shield_tip(shieldResult.absorbedDamage);
}
if (damage <= 0) return reDate;
// 应用伤害到数据层
TAttrsComp.hp -= damage;
@@ -429,10 +434,14 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
*
* @param TAttrsComp 被攻击者的属性组件(包含当前护盾值)
* @param damage 原始伤害值
* @returns 剩余伤害值(护盾吸收后的结果)
* @returns {remainingDamage, absorbedDamage} 剩余伤害值和吸收的护盾值
*/
private absorbShield(TAttrsComp: HeroAttrsComp, damage: number): number {
if (TAttrsComp.shield <= 0) return damage;
private absorbShield(TAttrsComp: HeroAttrsComp, damage: number): {remainingDamage: number, absorbedDamage: number} {
if (TAttrsComp.shield <= 0) {
console.log("[HeroAtkSystem] 护盾值小于等于0无法吸收伤害");
return {remainingDamage: damage, absorbedDamage: 0};
};
if (TAttrsComp.shield >= damage) {
TAttrsComp.shield -= damage;
@@ -440,12 +449,15 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
TAttrsComp.shield = 0;
TAttrsComp.Attrs[Attrs.SHIELD_MAX] = 0;
}
return 0;
console.log(`[HeroAtkSystem] 护盾值完全吸收伤害 ${damage}`);
return {remainingDamage: 0, absorbedDamage: damage};
} else {
const absorbedDamage = TAttrsComp.shield;
const remainingDamage = damage - TAttrsComp.shield;
TAttrsComp.shield = 0;
TAttrsComp.Attrs[Attrs.SHIELD_MAX] = 0;
return remainingDamage;
console.log(`[HeroAtkSystem] 护盾值部分吸收伤害 ${absorbedDamage}`);
return {remainingDamage, absorbedDamage};
}
}