Пример #1
0
    /// <summary>
    /// Comienza la ejecución de una habilidad concreta, modificando el estado en que se encuentra el personaje
    /// </summary>
    /// <param name="ability">Habilidad que se desea iniciar a ejecutar</param>
    /// <returns><c>true</c> si es posible iniciar la habilidad, en cuyo caso modifica además el estado del personaje; <c>false</c> en otro caso</returns>
    public bool StartAbility(CharacterAbility ability) {
        // Comprueba que el personaje no esté bloqueado por alguna animación
        bool res = !lockedByAnimation;
        if (res) {
            // Estados desde los que se puede iniciar cualquier habilidad: Walking, Idle
            res = (characterState.Equals(State.Walking) || characterState.Equals(State.Idle));
            if (res) {
                // Actualiza el estado del personaje
                switch (ability.abilityName) {
                    case AbilityName.AstralProjection:
                        characterState = State.AstralProjection;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.ASTRAL_PROJECTION);
                        break;
                    case AbilityName.BigJump:
                        characterState = State.BigJumping;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.BIG_JUMP);
                        break;
                    case AbilityName.Break:
                        characterState = State.Breaking;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.BREAK);
                        break;
                    case AbilityName.Push:
                        characterState = State.Pushing;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.PUSH);
                        break;
                    case AbilityName.Sprint:
                        characterState = State.Sprint;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.SPRINT);
                        break;
                    case AbilityName.Telekinesis:
                        characterState = State.Telekinesis;
                        CharacterAnimationController.SetAnimatorTrigger(characterName, CharacterAnimationController.TELEKINESIS);
                        break;
                }
                //INCREMENTAR EL NUMERO DE PARTICULAS
                playerParticles.IncreaseEmission(abilityEmissionRate);
                // Inicia la habilidad
                res = ability.ActivateAbility();
            }
        }

        return res;
    }