新增技能速度(SS)属性,用于减少非基础攻击技能的冷却时间 基础攻击技能冷却时间由英雄的as属性决定 眩晕和冰冻状态下不更新技能CD 合并冗余的canCast和resetCD方法
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
|
import { smc } from "../common/SingletonModuleComp";
|
|
import { HeroAttrsComp } from "./HeroAttrsComp";
|
|
import { HeroSkillsComp } from "./HeroSkills";
|
|
|
|
/**
|
|
* ==================== 技能CD更新系统 ====================
|
|
*
|
|
* 职责:
|
|
* 1. 每帧更新所有角色的技能CD
|
|
* 2. 自动递减CD时间
|
|
* 3. 管理技能冷却状态
|
|
* 4. 优化CD计算性能
|
|
*
|
|
* 设计理念:
|
|
* - 独立的CD管理系统
|
|
* - 只负责时间递减,不处理施法逻辑
|
|
* - 支持CD加速和减免效果
|
|
*/
|
|
@ecs.register('SkillCDSystem')
|
|
export class SkillCDSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
|
|
|
filter(): ecs.IMatcher {
|
|
return ecs.allOf(HeroSkillsComp);
|
|
}
|
|
|
|
update(e: ecs.Entity): void {
|
|
if(!smc.mission.play || smc.mission.pause) return;
|
|
const skills = e.get(HeroSkillsComp);
|
|
if (!skills) return;
|
|
const attrsCom = e.get(HeroAttrsComp);
|
|
if (!attrsCom) return;
|
|
if (attrsCom.isStun() || attrsCom.isFrost()) { // 眩晕和冰冻状态不更新CD
|
|
return;
|
|
}
|
|
// 更新所有技能CD
|
|
skills.updateCDs(this.dt);
|
|
}
|
|
|
|
/**
|
|
* 计算CD减免效果
|
|
*/
|
|
|
|
|
|
/**
|
|
* 更新技能就绪状态
|
|
*/
|
|
|
|
}
|