import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; 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 { s_uuid: number = 0; totalTime: number = 0; elapsedTime: number = 0; hitInterval: number = 0; hitElapsed: number = 0; pendingClose: boolean = false; reset() { this.s_uuid = 0; this.totalTime = 0; this.elapsedTime = 0; this.hitInterval = 0; this.hitElapsed = 0; this.pendingClose = false; } } @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.pendingClose) { skillView.close_collider(); timeComp.pendingClose = false; } if (timeComp.totalTime <= 0) { skillView.close_collider(); entity.destroy(); return; } timeComp.elapsedTime += this.dt; timeComp.hitElapsed += this.dt; if (timeComp.hitInterval > 0 && timeComp.hitElapsed >= timeComp.hitInterval && !timeComp.pendingClose) { timeComp.hitElapsed -= timeComp.hitInterval; skillView.atk(null); timeComp.pendingClose = true; } if (timeComp.elapsedTime >= timeComp.totalTime) { skillView.close_collider(); entity.destroy(); } } }