70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
import { Component } from '../core/Component.js';
|
|
|
|
export class Skills extends Component {
|
|
constructor() {
|
|
super('Skills');
|
|
this.activeSkills = []; // Array of skill IDs
|
|
this.passiveSkills = []; // Array of passive skill IDs
|
|
this.skillCooldowns = new Map(); // skillId -> remaining cooldown time
|
|
}
|
|
|
|
/**
|
|
* Add a skill
|
|
*/
|
|
addSkill(skillId, isPassive = false) {
|
|
if (isPassive) {
|
|
if (!this.passiveSkills.includes(skillId)) {
|
|
this.passiveSkills.push(skillId);
|
|
}
|
|
} else {
|
|
if (!this.activeSkills.includes(skillId)) {
|
|
this.activeSkills.push(skillId);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if entity has a skill
|
|
*/
|
|
hasSkill(skillId) {
|
|
return this.activeSkills.includes(skillId) ||
|
|
this.passiveSkills.includes(skillId);
|
|
}
|
|
|
|
/**
|
|
* Set skill cooldown
|
|
*/
|
|
setCooldown(skillId, duration) {
|
|
this.skillCooldowns.set(skillId, duration);
|
|
}
|
|
|
|
/**
|
|
* Update cooldowns
|
|
*/
|
|
updateCooldowns(deltaTime) {
|
|
for (const [skillId, cooldown] of this.skillCooldowns.entries()) {
|
|
const newCooldown = cooldown - deltaTime;
|
|
if (newCooldown <= 0) {
|
|
this.skillCooldowns.delete(skillId);
|
|
} else {
|
|
this.skillCooldowns.set(skillId, newCooldown);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if skill is on cooldown
|
|
*/
|
|
isOnCooldown(skillId) {
|
|
return this.skillCooldowns.has(skillId);
|
|
}
|
|
|
|
/**
|
|
* Get remaining cooldown
|
|
*/
|
|
getCooldown(skillId) {
|
|
return this.skillCooldowns.get(skillId) || 0;
|
|
}
|
|
}
|
|
|
|
|