예제 #1
0
    private Enemy.Enemy findNearestEnemy()
    {
        if (bounceCount >= MaxBounce)
        {
            return(null);
        }
        ++bounceCount;
        // TODO: Find new target
        float nearestDist = 0.0f;

        Enemy.Enemy nearestEnemy = null;
        float       range        = DetectionRadius * RefTileMap.TileSize;

        // Temp disable previous target collider so that raycast works
        prevTarget.GetComponent <BoxCollider2D>().enabled = false;

        foreach (GameObject go in RefEnemyManager.ActiveResourcesList)
        {
            Enemy.Enemy e = go.GetComponent <Enemy.Enemy>();
            // Cannot assign to the current enemy you're on and have to be within range specified
            if (go != prevTarget.gameObject /*(e.transform.position - transform.position).sqrMagnitude <= rangeSqr*/)
            {
                LayerMask    mask    = 1 << 12;
                RaycastHit2D raycast = Physics2D.Raycast(transform.position, (go.transform.position - transform.position).normalized, range, mask.value);
                if (raycast)
                {
                    // Within range and not on current collided enemy
                    if (nearestEnemy)
                    {
                        // Nearest exists, check distance
                        if (raycast.distance < nearestDist)
                        {
                            nearestDist  = raycast.distance;
                            nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>();
                        }
                    }
                    else
                    {
                        // Nearest does not exists, direct assign
                        nearestDist  = raycast.distance;
                        nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>();
                    }
                }
            }
        }
        // Enable previous target collider so that everything is back to normal
        prevTarget.GetComponent <BoxCollider2D>().enabled = true;

        return(nearestEnemy);
    }