Exemplo n.º 1
0
    private bool TailAttack()
    {
        if (!attacking)
        {
            elapsedAttackTime = 0;
            attacking         = true;
            back            = false;
            entryTime       = 0;
            initialPosition = myTransform.position;
            initialRotation = myTransform.rotation;
        }

        elapsedAttackTime += Time.deltaTime;
        animator.SetBool("Moving", true);
        print(back);

        if (!back)
        {
            float ratio = Mathf.Clamp(elapsedAttackTime / approachTime, 0, 0.8f);
            myTransform.position = Vector3.Lerp(initialPosition, targetedEnemyTransform.position, ratio);

            if (ratio >= 0.8f)
            {
                animator.SetBool("Moving", false);
                animator.SetBool("TailAttack", true);
                if (entryTime == 0)
                {
                    entryTime = Time.time;
                }

                AnimatorStateInfo clip = animator.GetCurrentAnimatorStateInfo(0);
                if (clip.IsName("TailAttack") && clip.normalizedTime > 0.95f)
                {
                    targetedEnemyBattleScript.TakeDamage((int)(entity.Stats.Attack * tailAttackMult));
                    animator.SetBool("TailAttack", false);
                    back = true;
                    myTransform.eulerAngles = myTransform.eulerAngles + 180f * Vector3.up;
                    elapsedAttackTime       = 0;
                    entryTime = 0;
                }
            }
        }
        else
        {
            float ratio = Mathf.Clamp(elapsedAttackTime / approachTime + 0.2f, 0.2f, 1.0f);
            myTransform.position = Vector3.Lerp(targetedEnemyTransform.position, initialPosition, ratio);
            if (ratio >= 1.0f)
            {
                myTransform.rotation = initialRotation;                 //TODO maybe smooth rotation?
                animator.SetBool("Moving", false);
                attacking = false;
                return(true);
            }
        }

        return(false);
    }
Exemplo n.º 2
0
    public bool Heal()
    {
        Debug.Log("Start heal.");
        if (!healing)
        {
            Debug.Log("Not Healing.");
            int min = 0;
            for (int i = 0; i < enemies.Length; i++)
            {
                if (!alive[i])
                {
                    continue;
                }
                Debug.Log("Chose" + i);
                min          = (int)enemyScripts[i].entity.CurrentHealth;
                target       = enemies[i];
                targetScript = enemyScripts[i];
                break;
            }
            for (int i = 1; i < enemies.Length; i++)
            {
                if (!alive[i])
                {
                    continue;
                }
                int health = (int)enemyScripts[i].entity.CurrentHealth;
                if (health < min)
                {
                    Debug.Log("Chose " + i);
                    min          = health;
                    target       = enemies[i];
                    targetScript = enemyScripts[i];
                }
            }

            healing = true;
        }

        animator.SetBool("Fire", true);

        AnimatorStateInfo clip = animator.GetCurrentAnimatorStateInfo(0);

        if (clip.IsName("Fire") && clip.normalizedTime > 0.95f)
        {
            Vector3 healPos = new Vector3(target.transform.position.x, target.transform.position.y + 1f, target.transform.position.z);
            Instantiate(healParticleObject, healPos, transform.rotation);
            ds.PlaySoundScript("event:/Characters/Combat/Dragon/char_dragon_heal", 0, 0);
            targetScript.TakeDamage(-(int)(entity.Stats.Attack * healMult));
            animator.SetBool("Fire", false);
            healing      = false;
            healCooldown = 2;
            return(true);
        }

        return(false);
    }