예제 #1
0
    public bool TargetsNear()
    {
        if (!Targeted)
        {
            int       targetsCount = Physics.OverlapSphereNonAlloc(transform.position + transform.forward * meleeTargetingRange / 3 * 2, meleeTargetingRange, targets, mask);
            Transform temp         = null;

            for (int i = 0; i < targetsCount; i++)
            {
                bool lokingAtTarget = InRange(Vector3.Angle(transform.forward, targets[i].transform.position - transform.position),
                                              maxTargetingAngle);

                //float angleBtw = Vector3.Angle(transform.forward, targets[i].transform.position - transform.position);

                if (temp == null)
                {
                    temp = targets[i].transform;
                }

                if (temp != null && targets[i] != null && Vector3.SqrMagnitude(temp.transform.position - transform.position)
                    > Vector3.SqrMagnitude(targets[i].transform.position - transform.position) && lokingAtTarget)
                {
                    temp = targets[i].transform;
                }
            }

            if (temp != null)
            {
                targetHealth = temp.GetComponent <EnemyAIbase>();
                if (!targetHealth.Died && targetHealth.state != EnemyAIbase.UnitStates.UNACTIVE)
                {
                    //Debug.Log("Targeted");
                    Target = temp.transform;
                    targetHealth.Targeted();
                }
                else
                {
                    targetHealth = null;
                }
            }
            else
            {
                Target = null;
            }
        }
        else
        {
            float _angleBtw = Vector3.Angle(transform.forward, Target.position - transform.position);
            if (targetHealth.Died || Vector3.SqrMagnitude(Target.position - transform.position) > 16 ||
                !InRange(_angleBtw, maxTargetingAngle + 5))
            {
                //Debug.Log("Untargeted, angle " + _angleBtw);
                targetHealth.Targeted();
                Target = null;
            }
        }
        return(true);
    }
예제 #2
0
    void SeeByEnemy(EnemyAIbase enemy)
    {
        EnemyesInBattle.Add(enemy);

        if (!BattleStarted)
        {
            StartBattle();
        }
    }
예제 #3
0
    void EnemyDied(EnemyAIbase enemy)
    {
        AllEnemys.Remove(enemy);
        EnemyesInBattle.Remove(enemy);

        if (EnemyesInBattle.Count == 0)
        {
            EndBattle();
        }
    }
예제 #4
0
    void SeeByEnemy(EnemyAIbase enemy)
    {
        EnemyInBattleEventHandler(enemy);
        EnemyesInBattle.Add(enemy);

        if (!BattleStarted)
        {
            StartBattle();
        }
    }
예제 #5
0
    void Targeting()
    {
        for (int i = 0; i < enemyesInBattle.Count; i++)
        {
            if (TargetEnemy == null)
            {
                TargetEnemy = enemyesInBattle[i];
            }
            else if (enemyesInBattle[i] != null)
            {
                bool distanceCheck = Vector3.SqrMagnitude(TargetEnemy.transform.position - transform.position)
                                     > Vector3.SqrMagnitude(enemyesInBattle[i].transform.position - transform.position);

                bool angleCheck = Vector3.Angle(transform.forward, TargetEnemy.transform.position - transform.position)
                                  > Vector3.Angle(transform.forward, enemyesInBattle[i].transform.position - transform.position);

                Debug.Log(distanceCheck + "   " + angleCheck);

                if (distanceCheck || angleCheck)
                {
                    TargetEnemy = enemyesInBattle[i];
                }
            }
        }

        if (TargetEnemy != null)
        {
            if (TargetEnemy.Died || TargetEnemy.state == EnemyAIbase.UnitStates.UNACTIVE)
            {
                enemyesInBattle.Remove(TargetEnemy);
                TargetEnemy = null;
                Target      = null;
            }
            else
            {
                Debug.Log("Targeted");
                Target = TargetEnemy.transform;
            }
        }
        else
        {
            Target = null;
        }
    }
예제 #6
0
 void EnemyCreated(EnemyAIbase enemy)
 {
     AllEnemys.Add(enemy);
 }
예제 #7
0
    void SearchingForTargets()
    {
        if (!weapon.CurrentWeaponRanged())
        {
            /*
             *
             * {*/
            int       targetsCount = Physics.OverlapSphereNonAlloc(transform.position + transform.forward * meleeTargetingRange / 3 * 2, meleeTargetingRange, targets, mask);
            Transform temp         = null;

            for (int i = 0; i < targetsCount; i++)
            {
                if (temp == null)
                {
                    temp = targets[i].transform;
                }
                else if (temp != null && targets[i] != null)
                {
                    bool distanceCheck = Vector3.SqrMagnitude(temp.transform.position - transform.position)
                                         > Vector3.SqrMagnitude(targets[i].transform.position - transform.position);

                    bool angleCheck = Vector3.Angle(transform.forward, temp.transform.position - transform.position)
                                      > Vector3.Angle(transform.forward, targets[i].transform.position - transform.position);

                    if (distanceCheck || angleCheck)
                    {
                        temp = targets[i].transform;
                    }
                }
            }

            if (!Targeted && temp != null)
            {
                targetHealth = temp.GetComponent <EnemyAIbase>();
                if (!targetHealth.Died && targetHealth.state != EnemyAIbase.UnitStates.UNACTIVE)
                {
                    //Debug.Log("Targeted");
                    Target = temp.transform;
                    targetHealth.Targeted();
                }
                else
                {
                    targetHealth = null;
                }
            }
            else if (Targeted && temp == null)
            {
                Target = null;
            }

            /*
             * }
             * else
             * {
             * float _angleBtw = Vector3.Angle(transform.forward, Target.position - transform.position);
             * if (targetHealth.Died)// || Vector3.SqrMagnitude(Target.position - transform.position) > meleeTargetingRange * meleeTargetingRange)
             * // || !InRange(_angleBtw, maxTargetingAngle + 5))
             * {
             *  //Debug.Log("Untargeted, angle " + _angleBtw);
             *  targetHealth.Targeted();
             *  Target = null;
             * }
             * }*/
        }
        else
        {
            if (!Targeted)
            {
                int       targetsCount = Physics.OverlapSphereNonAlloc(transform.position + transform.forward * rangedTargetingRange / 3 * 2, rangedTargetingRange, targets, mask);
                Transform temp         = null;

                for (int i = 0; i < targetsCount; i++)
                {
                    bool lokingAtTarget = InRange(Vector3.Angle(transform.forward, targets[i].transform.position - transform.position),
                                                  maxTargetingAngle);

                    // Is target visible?

                    if (temp == null)
                    {
                        temp = targets[i].transform;
                    }
                    else
                    if (temp != null && targets[i] != null && Vector3.SqrMagnitude(temp.transform.position - transform.position)
                        > Vector3.SqrMagnitude(targets[i].transform.position - transform.position) && lokingAtTarget)
                    {
                        temp = targets[i].transform;
                    }
                }

                if (temp != null)
                {
                    targetHealth = temp.GetComponent <EnemyAIbase>();
                    if (!targetHealth.Died && targetHealth.state != EnemyAIbase.UnitStates.UNACTIVE)
                    {
                        //Debug.Log("Targeted");
                        Target = temp.transform;
                        targetHealth.Targeted();
                    }
                    else
                    {
                        targetHealth = null;
                    }
                }
                else
                {
                    Target = null;
                }
            }
            else
            {
                float _angleBtw = Vector3.Angle(transform.forward, Target.position - transform.position);
                if (targetHealth.Died || Vector3.SqrMagnitude(Target.position - transform.position) > 169 ||
                    !InRange(_angleBtw, maxTargetingAngle - 10))
                {
                    // Debug.Log("Untargeted, angle " + _angleBtw + "   " + Vector3.SqrMagnitude(Target.position - transform.position));
                    targetHealth.Targeted();
                    Target = null;
                }
            }
        }
    }
예제 #8
0
 void InBattle(EnemyAIbase enemy)
 {
     enemyesInBattle.Add(enemy);
 }