コード例 #1
0
    public override IEnumerator ExecuteEffect(GameObject target, Vector3 startPosition, float characterSpeed, BaseBattleStateMachine characterStateMachine)
    {
                #pragma warning disable 0219
        GameObject attackAnimEffect = null;
        if (animationPrefab != null)
        {
            attackAnimEffect = Instantiate(animationPrefab, target.transform, false);
        }
                #pragma warning restore 0219

        yield return(new WaitForSeconds(WaitUntilFinished(characterStateMachine, target)));

        BaseBattleStateMachine targetStateMachine = target.GetComponent <BaseBattleStateMachine>();
        if (targetStateMachine != null)
        {
            FloatingTextController.CreateFloatingText(item.value.ToString(), target.transform, textColor);
            item.UseItem(targetStateMachine.character);
            if (targetStateMachine is CharacterStateMachine)
            {
                targetStateMachine.UpdateHeroPanel();
            }
        }
        #if UNITY_EDITOR
        Debug.Log("Used in battle");
        #endif
        yield return(null);
    }
コード例 #2
0
ファイル: BaseAttack.cs プロジェクト: charlink1/iwmr
    //Retorna tiempo de espera hasta finalizar el ataque
    protected float WaitUntilFinished(BaseBattleStateMachine characterStateMachine, GameObject target, Vector3 damagePosition)
    {
        if (animationPrefab != null)
        {
            GameObject attackAnimEffect = Instantiate(animationPrefab, target.transform, false);
            // Si el enemigo es muy grande (se incluye la posición del daño) la animación no aparece en el centro.
            if (damagePosition != Vector3.zero)
            {
                attackAnimEffect.transform.localPosition = damagePosition;
                attackAnimEffect.transform.localScale    = attackAnimEffect.transform.localScale * 2;
            }


            if (characterStateMachine is CharacterStateMachine)
            {
                attackAnimEffect.GetComponent <SpriteRenderer>().flipX = true;
            }

            return(attackAnimEffect.GetComponent <AttackAnimation>().GetAnimationLength());
        }
        else
        {
            return(0.5f);
        }
    }
コード例 #3
0
    protected IEnumerator CastMagic(GameObject target, BaseBattleStateMachine stateMachine)
    {
        if (stateMachine is CharacterStateMachine)
        {
            ((CharacterStateMachine)stateMachine).animator.SetBool("usingMagic", true);
        }

        yield return(new WaitForSeconds(WaitUntilFinished(stateMachine, target)));

        //Aplicar efecto
        stateMachine.DoDamage(true);

        if (stateMachine is CharacterStateMachine)
        {
            ((CharacterStateMachine)stateMachine).animator.SetBool("usingMagic", false);
        }
    }
コード例 #4
0
    public override IEnumerator ExecuteEffect(GameObject target, Vector3 startPosition, float characterSpeed, BaseBattleStateMachine characterStateMachine)
    {
        yield return(CastMagic(target, characterStateMachine));

        characterStateMachine.character.charStats.currentMagicPoints -= attackCost;

        if (characterStateMachine is CharacterStateMachine)
        {
            characterStateMachine.UpdateHeroPanel();
        }

        yield return(null);
        //  }
    }
コード例 #5
0
    public override IEnumerator ExecuteEffect(GameObject target, Vector3 startPosition, float characterSpeed, BaseBattleStateMachine characterStateMachine)
    {
        // Si el character animator es null
        if (characterAnimator == null)
        {
            characterAnimator = characterStateMachine.gameObject.GetComponent <Animator>();
        }

        if (target.GetComponent <CharacterStateMachine>() != null && characterAnimator != null && !characterAnimator.GetBool("attack"))
        {
            characterAnimator.SetBool("attack", true);
            // Hay que asegurarse de que el animator no está dentro de una transición
            while (characterAnimator.GetCurrentAnimatorClipInfo(0).Length == 0)
            {
                yield return(null);
            }

            yield return(new WaitForSeconds(WaitUntilFinished(characterAnimator)));

            yield return(new WaitForSeconds(WaitUntilFinished(characterStateMachine, target)));

            //Aplicar efecto
            characterStateMachine.DoDamage();

            characterAnimator.SetBool("attack", false);
        }
    }
コード例 #6
0
ファイル: BaseItemAttack.cs プロジェクト: charlink1/iwmr
 public override IEnumerator ExecuteEffect(GameObject target, Vector3 startPosition, float characterSpeed, BaseBattleStateMachine characterStateMachine)
 {
     #if UNITY_EDITOR
     Debug.Log("Used in battle");
     #endif
     yield return(null);
 }
コード例 #7
0
ファイル: BaseAttack.cs プロジェクト: charlink1/iwmr
    public virtual IEnumerator ExecuteEffect(GameObject target, Vector3 startPosition, float characterSpeed, BaseBattleStateMachine characterStateMachine)
    {
        if (characterStateMachine.character != null)
        {
            character = characterStateMachine.character;
        }
        else
        {
            character = characterStateMachine.GetComponent <Character>();
        }


        if (target.GetComponent <CharacterStateMachine>() == null || characterStateMachine is EnemyStateMachine)
        {
            Character targetChar = target.GetComponent <Character>();
            // Vector2 modifier = targetChar.minAttackerDistance;
            //if (characterStateMachine is EnemyStateMachine)
            //    modifier.x = -modifier.x;

            //  Vector3 enemyPosition = new Vector3(target.transform.position.x + modifier.x, target.transform.position.y + modifier.y, target.transform.position.z);

            Vector3 targetPosition = targetChar.targetAttack.transform.position;
            Vector3 enemyPosition  = new Vector3(targetPosition.x + character.attackPositionOffset.x, targetPosition.y + character.attackPositionOffset.y, targetPosition.z);


            while (MoveTowardsEnemy(enemyPosition, characterStateMachine.gameObject, characterSpeed))
            {
                yield return(null);
            }

            Vector3    damagePosition = Vector3.zero;
            GameObject obj            = Helper.FindChildWithTag(characterStateMachine.transform, "DamagePosition");

            // En el caso de tener posición donde recibir el daño se utilizará esta para mostrar la animación y el texto del daño
            if (obj != null)
            {
                damagePosition = obj.transform.position;
            }


            //Esperar
            yield return(new WaitForSeconds(WaitUntilFinished(characterStateMachine, target, damagePosition)));

            //Aplicar efecto
            characterStateMachine.DoDamage(damagePosition);

            //Mover a posicion inicial
            // Vector3 firstPosition = startPosition;
            while (MoveTowardsEnemy(startPosition, characterStateMachine.gameObject, characterSpeed))
            {
                yield return(null);
            }
        }
        else
        {
            if (target != null && characterStateMachine is CharacterStateMachine)
            {
                yield return(new WaitForSeconds(WaitUntilFinished(characterStateMachine, target)));
            }

            else
            {
                yield return(new WaitForSeconds(0.5f));
            }
            //Aplicar efecto
            characterStateMachine.DoDamage();
        }
    }
コード例 #8
0
ファイル: BaseAttack.cs プロジェクト: charlink1/iwmr
 protected float WaitUntilFinished(BaseBattleStateMachine characterStateMachine, GameObject target)
 {
     return(WaitUntilFinished(characterStateMachine, target, Vector3.zero));
 }