// Perform shield bash skill public void performShieldBashSkill(int entityId, ShieldBashSkill shieldBashSkill) { FactionComponent factionComponent = EntityManager.getFactionComponent(entityId); PositionComponent positionComponent = EntityManager.getPositionComponent(entityId); List<int> affectedEntities = Helpers.findEntitiesWithinRange(positionComponent.position, 3f, factionComponent.hostileFaction, entityId); foreach (int affectedId in affectedEntities) { SystemManager.combatSystem.attack(shieldBashSkill, entityId, affectedId, 0, shieldBashSkill.attackDie, shieldBashSkill.damageDie); resetCooldown(entityId, SkillType.ShieldBash); } }
// Initialize shield bash skill private void initializeShieldBashSkill(int entityId, ShieldBashSkill shieldBashSkill) { Action<Skill, int, int> onHitOther = (skill, attackerId, defenderId) => { // Skip if not shield bash skill if (skill.type != SkillType.ShieldBash) { return; } // Skip if defender's dead if (!EntityManager.doesEntityExist(defenderId)) { return; } SystemManager.combatSystem.applyKnockback(attackerId, defenderId, shieldBashSkill.knockbackForce, shieldBashSkill.knockbackNormal); }; EntityFactory.createProcSpell(entityId, onHitOther); }