Exemplo n.º 1
0
    protected override void BasicDamage()
    {
        //Debug.Log(attackTimer);

        bool attacked = false;

        if (!attacked)
        {
            for (int curITarget = 0; curITarget < inactiveTargets.Count; curITarget++)
            {
                if (inactiveTargets[curITarget] != null)
                {
                    float dis = Mathf.Abs(inactiveTargets[curITarget].transform.position.x -
                                          transform.position.x);
                    bool faced = (transform.localScale.x *
                                  (inactiveTargets[curITarget].transform.position.x - transform.position.x)) > 0;

                    if ((dis < attackScope) && (inactiveTargets[curITarget].curHealth > 0f) && faced)
                    {
                        // Deal with object targets firstly
                        inactiveTargets[curITarget].TakeDamage(this.gameObject, attackDamage);
                        isAttacking = true;
                        attacked    = true;
                        break;
                    }
                }
            }
        }

        if (!attacked)
        {
            float              minDisMinion = float.PositiveInfinity;
            float              minDisChamp  = float.PositiveInfinity;
            MinionController   targetMinion = null;
            ChampionController targetChamp  = null;
            for (int curATarget = 0; curATarget < activeTargets.Count; curATarget++)
            {
                if (activeTargets[curATarget] != null)
                {
                    float dis = Vector3.Distance(transform.position,
                                                 activeTargets[curATarget].transform.position);
                    bool faced = (transform.localScale.x *
                                  (activeTargets[curATarget].transform.position.x - transform.position.x)) > 0;

                    if ((dis < attackScope) && (activeTargets[curATarget].curHealth > 0f))
                    {
                        if (!faced)
                        {
                            Vector3 tempScale = new Vector3(-transform.localScale.x,
                                                            transform.localScale.y, transform.localScale.z);
                            transform.localScale = tempScale;
                        }

                        if (activeTargets[curATarget] is MinionController)
                        {
                            if (dis < minDisMinion)
                            {
                                minDisMinion = dis;
                                targetMinion = (MinionController)activeTargets[curATarget];
                            }
                        }
                        else if (activeTargets[curATarget] is ChampionController)
                        {
                            if (dis < minDisChamp)
                            {
                                minDisChamp = dis;
                                targetChamp = (ChampionController)activeTargets[curATarget];
                            }
                        }
                    }
                }
            }

            // Deal with minion targets secondly
            if (targetMinion != null)
            {
                targetMinion.TakeDamage(this.gameObject, attackDamage);
                isAttacking = true;
                attacked    = true;
            }
            // Finally deal with champion targets
            else if (targetChamp != null)
            {
                targetChamp.TakeDamage(this.gameObject, attackDamage);
                isAttacking = true;
                attacked    = true;
            }
        }

        if (!attacked)
        {
            //Debug.Log("End of attacking");
            isAttacking = false;
        }

        // reset the timer
        attackTimer = 0f;
    }