@reldens/skills
Version:
42 lines (35 loc) • 1.29 kB
JavaScript
/**
*
* Reldens - Skills - PhysicalSkillRunner
*
*/
const SkillsConst = require('@reldens/skills/lib/constants');
class PhysicalSkillRunner
{
static async runSkillLogic(skill)
{
this.lastState = null;
if(!skill.validateRange(skill.target)){
this.lastState = SkillsConst.SKILL_STATES.OUT_OF_RANGE;
// @NOTE: out of range, the owner or the target could have moved away.
return false;
}
this.lastState = SkillsConst.SKILL_STATES.EXECUTE_PHYSICAL_ATTACK;
await skill.owner.executePhysicalSkill(skill.target, skill);
return false;
}
static async executeOnHit(target, skill, skillType, runSkillLogicCallback)
{
await skill.fireEvent(skillType, skill, target);
if(skill.validateTargetOnHit && target !== skill.target){
this.lastState = SkillsConst.SKILL_STATES.PHYSICAL_SKILL_INVALID_TARGET;
return false;
}
if('function' !== typeof runSkillLogicCallback){
return false;
}
this.lastState = SkillsConst.SKILL_STATES.PHYSICAL_SKILL_RUN_LOGIC;
return await runSkillLogicCallback(target);
}
}
module.exports.PhysicalSkillRunner = PhysicalSkillRunner;