feat(skill): 为技能系统添加基于时间的结束条件支持
- 在 SkillConfig 接口中新增可选的 time 字段,用于配置持续时间 - 在 Skill 实体初始化时,根据 EType.timeEnd 类型添加或移除时间组件 - 新增 StimeDataComp 组件存储技能时间数据 - 新增 STimeSystem 系统处理技能时间更新逻辑,实现定时销毁技能
This commit is contained in:
@@ -1,25 +1,43 @@
|
||||
import { Vec3, v3, Node } from "cc";
|
||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||
import { RType, EType, SkillSet } from "../common/config/SkillSet";
|
||||
import { BoxSet } from "../common/config/GameSet";
|
||||
import { EType, SkillSet } from "../common/config/SkillSet";
|
||||
import { SkillView } from "./SkillView";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
|
||||
/**
|
||||
* ==================== 技能移动数据组件 ====================
|
||||
*
|
||||
* 用途:
|
||||
* - 存储技能实体的移动相关数据
|
||||
* - 管理移动状态和参数
|
||||
* - 支持多种移动类型(线性、贝塞尔、固定位置等)
|
||||
*/
|
||||
@ecs.register('StimeDataComp')
|
||||
export class StimeDataComp extends ecs.Comp {
|
||||
/** 技能UUID */
|
||||
s_uuid: number = 0;
|
||||
reset() {
|
||||
|
||||
}
|
||||
totalTime: number = 0;
|
||||
elapsedTime: number = 0;
|
||||
|
||||
reset() {
|
||||
this.s_uuid = 0;
|
||||
this.totalTime = 0;
|
||||
this.elapsedTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ecs.register('STimeSystem')
|
||||
export class STimeSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
||||
filter(): ecs.IMatcher {
|
||||
return ecs.allOf(StimeDataComp, SkillView);
|
||||
}
|
||||
|
||||
update(entity: ecs.Entity): void {
|
||||
if(!smc.mission.play ) return;
|
||||
if(smc.mission.pause) return
|
||||
const timeComp = entity.get(StimeDataComp);
|
||||
const skillView = entity.get(SkillView);
|
||||
if (!timeComp || !skillView) return;
|
||||
const conf = SkillSet[timeComp.s_uuid];
|
||||
if (!conf || conf.EType !== EType.timeEnd) return;
|
||||
if (timeComp.totalTime <= 0) {
|
||||
skillView.close_collider();
|
||||
entity.destroy();
|
||||
return;
|
||||
}
|
||||
timeComp.elapsedTime += this.dt;
|
||||
if (timeComp.elapsedTime >= timeComp.totalTime) {
|
||||
skillView.close_collider();
|
||||
entity.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user