Пример #1
0
        // Perform throw rope skill
        public void performThrowRopeSkill(int entityId, ThrowRopeSkill throwRopeSkill, Vector2 anchor)
        {
            PerformingSkillsComponent performingSkillsComponent = EntityManager.getPerformingSkillsComponent(entityId);
            HasProxyComponent hasProxyComponent = EntityManager.getHasProxyComponent(entityId);
            IsProxyComponent isProxyComponent = EntityManager.getIsProxyComponent(entityId);
            GroupComponent groupComponent;
            ExecuteThrowRopeSkill executeSkill;

            // Find group
            if (isProxyComponent != null)
            {
                groupComponent = SystemManager.groupSystem.getGroupComponentContaining(isProxyComponent.proxyForId);
            }
            else
            {
                groupComponent = SystemManager.groupSystem.getGroupComponentContaining(entityId);
            }

            // Check for has proxy component
            if (hasProxyComponent != null)
            {
                EntityManager.removeComponent(hasProxyComponent.proxyId, ComponentType.PositionTarget);
                performThrowRopeSkill(hasProxyComponent.proxyId, throwRopeSkill, anchor);
                return;
            }

            // Create execute skill object
            executeSkill = new ExecuteThrowRopeSkill(
                throwRopeSkill,
                anchor,
                () =>
                {
                    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;
                });

            // Check for a group
            if (groupComponent != null)
            {
                LimitedRangeFormation formation = new LimitedRangeFormation(groupComponent.entities, groupComponent.activeFormation.position, groupComponent.activeFormation.speed, float.MinValue, anchor.X - 4f);

                groupComponent.addFormation(formation);
                executeSkill.formationToRemove = formation;
            }

            EntityManager.addComponent(entityId, new PositionTargetComponent(entityId, anchor.X, throwRopeSkill.range));
            performingSkillsComponent.executingSkills.Add(executeSkill);
        }
Пример #2
0
        // Execute throw rope
        private void executeThrowRope(int entityId, ExecuteThrowRopeSkill executeThrowRopeSkill)
        {
            PerformingSkillsComponent performSkillsComponent = EntityManager.getPerformingSkillsComponent(entityId);
            IsProxyComponent isProxyComponent = EntityManager.getIsProxyComponent(entityId);
            GroupComponent groupComponent;

            // Handle proxies
            if (isProxyComponent != null)
            {
                groupComponent = SystemManager.groupSystem.getGroupComponentContaining(isProxyComponent.proxyForId);
            }
            else
            {
                groupComponent = SystemManager.groupSystem.getGroupComponentContaining(entityId);
            }

            EntityFactory.createRope(executeThrowRopeSkill.anchor);
            EntityManager.removeComponent(entityId, ComponentType.PositionTarget);

            if (groupComponent != null)
            {
                float currentPosition = groupComponent.getFormation(FormationType.LimitedRange).position;

                groupComponent.getFormation(FormationType.Default).position = currentPosition;
                groupComponent.removeFormation(executeThrowRopeSkill.formationToRemove);
            }

            removeExecutedSkill(entityId, executeThrowRopeSkill);
        }