// Perform volley skill // Note: This is another channelled spell. See Rain of Fire's comment above. public void performVolleySkill(int entityId, VolleySkill skill, Vector2 position) { PositionComponent positionComponent = EntityManager.getPositionComponent(entityId); PerformingSkillsComponent performingSkillsComponent = EntityManager.getPerformingSkillsComponent(entityId); FactionComponent factionComponent = EntityManager.getFactionComponent(entityId); ExecuteVolleySkill executeSkill = new ExecuteVolleySkill( skill, () => { PositionComponent checkPositionComponent = EntityManager.getPositionComponent(entityId); PositionTargetComponent positionTargetComponent = EntityManager.getPositionTargetComponent(entityId); float distance = Math.Abs(positionTargetComponent.position - checkPositionComponent.position.X); return distance <= positionTargetComponent.tolerance + SKILL_RANGE_TOLERANCE; }); EntityManager.addComponent(entityId, new PositionTargetComponent(entityId, positionComponent.position.X, 1f)); EntityFactory.createVolleySpell(position, skill.width, skill.damageDie, skill.tickDelay, skill.tickCount, new List<Faction>(new[] { factionComponent.hostileFaction })); performingSkillsComponent.executingSkills.Add(executeSkill); }
// Execute volley skill // Note: This is also a channelled spell. See rain of fire's comment above. private void executeVolley(int entityId, ExecuteVolleySkill executeSkill) { EntityManager.removeComponent(entityId, ComponentType.PositionTarget); resetCooldown(entityId, SkillType.Volley); removeExecutedSkill(entityId, executeSkill); }