Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        // 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);
            }
        }