Esempio n. 1
0
    public void UseMove(GameObject pokemon, GameObject theTarget)
    {
        level         = thisPokemon.level;
        attack        = thisPokemon.curATK;
        specialAttack = thisPokemon.curSPATK;
        acc           = thisPokemon.accuracy;
        baseSpeed     = thisPokemon.baseSPD;
        typeOne       = thisPokemon.typeOne;
        typeTwo       = thisPokemon.typeTwo;
        hit           = false;
        critHit       = false;
        if (selfTargeting)
        {
            target = gameObject;
        }
        else
        {
            target = theTarget;
        }
        targetPokemon        = theTarget.GetComponent <Pokemon>();
        targetDefense        = targetPokemon.curDEF;
        targetSpecialDefense = targetPokemon.curSPDEF;
        targetEva            = targetPokemon.evasion;
        targetTypeOne        = targetPokemon.typeOne;
        targetTypeTwo        = targetPokemon.typeTwo;
        Collider[] TempList = Physics.OverlapSphere(pokemon.transform.position, range);
        Targets = new List <GameObject>();
        foreach (Collider col in TempList)
        {
            if (thisPokemon.Enemies.Contains(col.gameObject))
            {
                Targets.Add(col.gameObject);
            }
        }
        if (target == gameObject && !selfTargeting)
        {
            return;
        }
        else if (!thisPokemon.Enemies.Contains(target) && !selfTargeting && !allyTargeting)
        {
            return;
        }
        else
        {
            pokemon.transform.LookAt(target.transform);
            input.attacking = true;
            if (!aoe)
            {
                if (!allyTargeting && !selfTargeting)
                {
                    if (target != gameObject)                   //Also add something here to check if target's a team member.
                    {
                        if (category == MoveCategoriesList.PHYSICAL)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            critHit = dmgCalc.DetermineCritical(baseSpeed, highCritChance);
                            damage  = dmgCalc.CalculateAttackDamage(power, critHit, type, level, attack, targetDefense, typeOne, typeTwo, targetTypeOne,
                                                                    targetTypeTwo);
                            chanceToHit = accuracy * (acc / targetEva);
                            float hit_or_miss = Random.Range(0.0f, 1.0f);
                            if (chanceToHit >= hit_or_miss)
                            {
                                hit = true;
                            }
                        }
                        if (category == MoveCategoriesList.SPECIAL)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            critHit = dmgCalc.DetermineCritical(baseSpeed, highCritChance);
                            damage  = dmgCalc.CalculateSpecialAttackDamage(power, critHit, type, level, specialAttack, targetSpecialDefense, typeOne, typeTwo,
                                                                           targetTypeOne, targetTypeTwo);

                            chanceToHit = accuracy * (acc / targetEva);
                            float hit_or_miss = Random.Range(0.0f, 1.0f);
                            if (chanceToHit >= hit_or_miss)
                            {
                                hit = true;
                            }
                        }
                        if (category == MoveCategoriesList.STATUS)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            chanceToHit = accuracy * (acc / targetEva);
                            float hit_or_miss = Random.Range(0.0f, 1.0f);
                            if (chanceToHit >= hit_or_miss)
                            {
                                hit = true;
                            }
                        }
                    }
                }
                if (allyTargeting || selfTargeting)
                {
                    if (target == gameObject)                   //Also add something here to check if target's a team member.
                    {
                        if (category == MoveCategoriesList.PHYSICAL)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            damage = dmgCalc.CalculateAttackDamage(power, critHit, type, level, attack, targetDefense, typeOne, typeTwo, targetTypeOne,
                                                                   targetTypeTwo);
                            chanceToHit = accuracy * (acc / targetEva);
                            float hit_or_miss = Random.Range(0.0f, 1.0f);
                            if (chanceToHit >= hit_or_miss)
                            {
                                hit = true;
                            }
                        }
                        if (category == MoveCategoriesList.SPECIAL)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            damage = dmgCalc.CalculateSpecialAttackDamage(power, critHit, type, level, specialAttack, targetSpecialDefense, typeOne, typeTwo,
                                                                          targetTypeOne, targetTypeTwo);

                            chanceToHit = accuracy * (acc / targetEva);
                            float hit_or_miss = Random.Range(0.0f, 1.0f);
                            if (chanceToHit >= hit_or_miss)
                            {
                                hit = true;
                            }
                        }
                        if (category == MoveCategoriesList.STATUS)
                        {
                            pokemon.GetComponent <Animator>().SetBool(moveName, true);
                            hit = true;
                        }
                    }
                }
            }
            if (aoe)
            {
                hit = true;
                pokemon.GetComponent <Animator>().SetBool(moveName, true);
            }
        }
    }