feat: migrate JavaScript files to TypeScript, enhancing type safety and maintainability across the codebase
This commit is contained in:
parent
3db2bb9160
commit
c582f2004e
107 changed files with 5876 additions and 3588 deletions
74
src/systems/SkillEffectSystem.ts
Normal file
74
src/systems/SkillEffectSystem.ts
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
import { System } from '../core/System.ts';
|
||||
import { SystemName } from '../core/Constants.ts';
|
||||
import type { Entity } from '../core/Entity.ts';
|
||||
|
||||
export interface SkillEffect {
|
||||
lifetime: number;
|
||||
time: number;
|
||||
type?: string;
|
||||
x?: number;
|
||||
y?: number;
|
||||
angle?: number;
|
||||
range?: number;
|
||||
coneAngle?: number;
|
||||
caster?: Entity;
|
||||
startX?: number;
|
||||
startY?: number;
|
||||
speed?: number;
|
||||
onUpdate?: (deltaTime: number) => void;
|
||||
onComplete?: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* System responsible for tracking and updating temporary active skill effects like fire breath or pounce trails.
|
||||
*/
|
||||
export class SkillEffectSystem extends System {
|
||||
activeEffects: SkillEffect[];
|
||||
|
||||
constructor() {
|
||||
super(SystemName.SKILL_EFFECT);
|
||||
this.requiredComponents = [];
|
||||
this.priority = 50;
|
||||
this.activeEffects = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all active effects, removing them when their lifetime expires.
|
||||
* @param deltaTime - Time elapsed since last frame in seconds
|
||||
* @param _entities - Filtered entities
|
||||
*/
|
||||
process(deltaTime: number, _entities: Entity[]): void {
|
||||
for (let i = this.activeEffects.length - 1; i >= 0; i--) {
|
||||
const effect = this.activeEffects[i];
|
||||
effect.lifetime -= deltaTime;
|
||||
effect.time += deltaTime;
|
||||
|
||||
if (effect.onUpdate) {
|
||||
effect.onUpdate(deltaTime);
|
||||
}
|
||||
|
||||
if (effect.lifetime <= 0) {
|
||||
if (effect.onComplete) {
|
||||
effect.onComplete();
|
||||
}
|
||||
this.activeEffects.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new visual skill effect to the system.
|
||||
* @param effect - The effect data object
|
||||
*/
|
||||
addEffect(effect: SkillEffect): void {
|
||||
this.activeEffects.push(effect);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of currently active skill effects.
|
||||
* @returns Array of active effects
|
||||
*/
|
||||
getEffects(): SkillEffect[] {
|
||||
return this.activeEffects;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue