feat(护盾系统): 完善护盾功能并添加吸收提示
- 在GameSet.ts中添加shield类型提示 - HeroViewComp新增shield_tip方法显示护盾吸收值 - 修改HeroAttrsComp移除护盾值上限限制 - TooltipCom添加shield类型提示处理 - 调整SACastSystem中治疗和护盾技能计算方式 - HeroAtkSystem优化护盾吸收逻辑并添加吸收提示
This commit is contained in:
@@ -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};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user