void Start()
    {
        guiManager = GameObject.Find("GUI").GetComponent<GUIManager>();

        terrainWidth = 100;
        terrainHeight = terrainWidth;

        try
        {
            GUIterrainPlannerMenu tpMenu = GameObject.Find("TerrainPlanner").GetComponent<GUIterrainPlannerMenu>();
            patchSize = tpMenu.patch.patchSize;
        }
        catch (Exception e)
        {
            Debug.Log("TerrainPlanner not found");
            patchSize = 64;
        }

        cameraMovement camera = transform.GetComponent<cameraMovement>();
        camera.ChangePosition(new Vector3(0, 100, 0));
        camera.ChangeRotation(new Vector3(90, 0, 0));

        scaleTerrainY = 12;

        int quadrantSize = Math.Max(terrainWidth, terrainHeight);

        layerManager = new LayerManager();

        globalTerrain = new GlobalTerrain(quadrantSize);
        localTerrain = new LocalTerrain(terrainWidth, terrainHeight, 30, globalTerrain, layerManager);
        filterGenerator = new FilterGenerator(quadrantSize, localTerrain);

        functionMathCalculator = new FunctionMathCalculator();
        functionDebugger = new FunctionDebugger();
        functionRiverDigger = new FunctionRiverDigger();
        functionRiverPlanner = new FunctionRiverPlanner();
        functionTerrainManager = new FunctionTerrainManager();

        terrainGenerator = new TerrainGenerator(patchSize);
        riverGenerator = new RiverGenerator(localTerrain);
        erosionGenerator = new ErosionGenerator(localTerrain);

        gridManager = new GridManager(new Vector3(0,0,0), patchSize, patchSize);

        AssignFunctions();
        terrainGenerator.initialize(scaleTerrainY);

        localTerrain.UpdateVisibleTerrain(new Vector3(0, 0, 0), false);
    }