Vector3 findBasePosition()
    {
        Vector3    randomPosition = RandomUtilities.GenerateRandomInsideRectangleXZ(Vector3.zero, terrainSize - terrainSizeOffset, terrainSize - terrainSizeOffset);
        NavMeshHit hit;
        int        tries           = 0;
        bool       isValidPosition = NavMesh.SamplePosition(randomPosition, out hit, 3f, NavMesh.AllAreas) && !IsAnotherBaseNear(hit.position);

        while (!isValidPosition)
        {
            tries++;
            randomPosition  = RandomUtilities.GenerateRandomInsideRectangleXZ(Vector3.zero, terrainSize - terrainSizeOffset, terrainSize - terrainSizeOffset);
            isValidPosition = NavMesh.SamplePosition(randomPosition, out hit, 3f, NavMesh.AllAreas) && !IsAnotherBaseNear(hit.position);
        }
        print(tries);
        return(hit.position);
    }