feat(skill): 为技能系统添加基于时间的结束条件支持
- 在 SkillConfig 接口中新增可选的 time 字段,用于配置持续时间 - 在 Skill 实体初始化时,根据 EType.timeEnd 类型添加或移除时间组件 - 新增 StimeDataComp 组件存储技能时间数据 - 新增 STimeSystem 系统处理技能时间更新逻辑,实现定时销毁技能
This commit is contained in:
@@ -8,6 +8,7 @@ import { Attrs } from "../common/config/HeroAttrs";
|
||||
import { SkillView } from "./SkillView";
|
||||
import { SDataCom } from "./SDataCom";
|
||||
import { SMoveDataComp } from "../skill/SMoveComp";
|
||||
import { StimeDataComp } from "./STimeComp";
|
||||
import { HeroViewComp } from "../hero/HeroViewComp";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { mLogger } from "../common/Logger";
|
||||
@@ -143,6 +144,17 @@ export class Skill extends ecs.Entity {
|
||||
// 从SkillView获取移动参数,位置初始化由SMoveSystem统一处理
|
||||
sMoveCom.atk_x = SView.atk_x;
|
||||
sMoveCom.atk_y = SView.atk_y;
|
||||
|
||||
if (config.EType === EType.timeEnd) {
|
||||
let sTimeCom = this.get(StimeDataComp);
|
||||
if (!sTimeCom) sTimeCom = this.add(StimeDataComp);
|
||||
sTimeCom.reset();
|
||||
sTimeCom.s_uuid = s_uuid;
|
||||
sTimeCom.totalTime = Math.max(0, config.time ?? 0);
|
||||
} else {
|
||||
const sTimeCom = this.get(StimeDataComp);
|
||||
if (sTimeCom) this.remove(StimeDataComp);
|
||||
}
|
||||
|
||||
let cAttrsComp=caster.ent.get(HeroAttrsComp)
|
||||
// 初始化数据组件
|
||||
@@ -177,6 +189,7 @@ export class Skill extends ecs.Entity {
|
||||
// 注: 自定义释放逻辑,视图层实现 ecs.IComp 接口的 ecs 组件需要手动释放
|
||||
this.remove(SDataCom);
|
||||
this.remove(SMoveDataComp)
|
||||
this.remove(StimeDataComp)
|
||||
|
||||
// 移除组件会触发 reset,但我们在 reset 中移除了 destroy
|
||||
this.remove(SkillView)
|
||||
|
||||
Reference in New Issue
Block a user