// Execute fatality private void executeFatality(int entityId, ExecuteFatalitySkill executeSkill) { PerformingSkillsComponent performingSkillsComponent = EntityManager.getPerformingSkillsComponent(entityId); FatalitySkill fatalitySkill = executeSkill.skill as FatalitySkill; if (EntityManager.doesEntityExist(executeSkill.targetEntityId)) // defender could have died already { SystemManager.combatSystem.attack(fatalitySkill, entityId, executeSkill.targetEntityId, 0, "9999", "9999"); } EntityManager.removeComponent(entityId, ComponentType.PositionTarget); resetCooldown(entityId, SkillType.Fatality); removeExecutedSkill(entityId, executeSkill); }
// Perform fatality skill public void performFatalitySkill(int entityId, FatalitySkill skill, Vector2 target) { FactionComponent factionComponent = EntityManager.getFactionComponent(entityId); PerformingSkillsComponent performingSkillsComponent = EntityManager.getPerformingSkillsComponent(entityId); ExecuteFatalitySkill executeSkill = null; List<Fixture> fixtures = SystemManager.physicsSystem.world.TestPointAll(target); foreach (Fixture fixture in fixtures) { int targetEntityId; FactionComponent targetFactionComponent; // Skip bodies without any userdata if (fixture.Body.UserData == null) { continue; } targetEntityId = (int)fixture.Body.UserData; // Skip entities without a faction component if ((targetFactionComponent = EntityManager.getFactionComponent(targetEntityId)) == null) { continue; } // Skip over non-attackable entities if (!SystemManager.combatSystem.isFactionAttackable(factionComponent.faction, targetFactionComponent.faction)) { continue; } // Create execute skill object executeSkill = new ExecuteFatalitySkill( skill, targetEntityId, () => { PositionComponent positionComponent = EntityManager.getPositionComponent(entityId); PositionTargetComponent positionTargetComponent = EntityManager.getPositionTargetComponent(entityId); float distance = Math.Abs(positionTargetComponent.position - positionComponent.position.X); return distance <= positionTargetComponent.tolerance + SKILL_RANGE_TOLERANCE; }); EntityManager.addComponent(entityId, new PositionTargetComponent(entityId, fixture.Body, skill.range)); break; } if (executeSkill != null) { performingSkillsComponent.executingSkills.Add(executeSkill); } }