public void UpdateTerrain(Vector3 terSize)
    {
        // Does not actually modify the actual current terrain size but sets other related properites based on the current selected terrain size
        //  A hobclob of different actions we take when terrain modified, including positions of player, water, bounds, horizon
        currentMap.map.GetComponent <Terrain>().basemapDistance = 2000;



        blockPlayerCube.transform.position   = new Vector3(terSize.x / 2f, 0, terSize.z / 2f);
        blockPlayerCube.transform.localScale = Vector3.one * terSize.x / 1000f * 1.1f;

        LevelBuilder.inst.camSkyNorthEastBoundary.transform.position = new Vector3(terSize.x, 0, terSize.z);
        //		// commented Debug.Log("tersize x:"+terSize.x);
        float hardcodedYposForTerrainFX   = -210f;
        float hardcodedYscaleForTerrainFX = 500f;
        float hardcodedToonWaterHeight    = 41.68f;

        //		float hardcodedHorizonObjectTransformPosY = 44f;
        waterFX.transform.position   = new Vector3(terSize.x / 2f, hardcodedYposForTerrainFX, terSize.z / 2f);
        waterFX.transform.localScale = new Vector3(terSize.x * 3f, hardcodedYscaleForTerrainFX, terSize.z * 3f);

        waterFXskyCam.transform.position = new Vector3(terSize.x / 2f, 23f, terSize.z / 2f);
        float waterFxMod = 1.4f;

        waterFXskyCam.transform.localScale = new Vector3(terSize.x + camBoundBuffer * waterFxMod, 22f, terSize.z + camBoundBuffer * waterFxMod);       // hardcoded values here
        waterFXskyCam.SetActive(LevelBuilder.inst.levelBuilderIsShowing);


        //		// commented Debug.Log("utwc size:"+utwc.config.size);
        float waterSizeDelta = 2f;         // waterSmallerOffsetForHorizonFXtoBlendSmoothly

        utwc.config.meshPointDistance = 48;
//		utwc.config.size = new Vector2(terSize.x*waterSizeDelta,terSize.z*waterSizeDelta);
        utwc.config.size = new Vector2(2000, 2000);
        //		// commented Debug.Log("utwc size:"+utwc.config.size);
        utwc.transform.position = new Vector3(terSize.x / 2f, hardcodedToonWaterHeight, terSize.z / 2f);
        utwc.Init();


        //		Horizon.HorizonMaster hm = FindObjectOfType<Horizon.HorizonMaster>();
        //		hm.transform.position = new Vector3(terSize.x/2f,0,terSize.z/2f);
        ////		hm.transform.Find("Horizon[ON]_Transition_Terrain").transform.localPosition = new Vector3(0,45,0);
        //		hm.transform.Find("Horizon[ON]_Transition_Terrain").transform.localScale = new Vector3(terSize.x,1,terSize.z);
        //		hm.transform.Find("BakedAndCombinedAndReduced").transform.localScale = Vector3.one * terSize.x / 1000f + Vector3.up;



        if (LevelBuilder.inst.firstTimeOpened)
        {
            SetCameraZoomByTerrainSize();
        }
    }
    void OnEnable()
    {
        dimObj         = new SerializedObject(target);
        bUseGPU        = dimObj.FindProperty("useGPU");
        bStickToTarget = dimObj.FindProperty("stickToTarget");
        bMoveTextures  = dimObj.FindProperty("moveTextures");
        bMoveMesh      = dimObj.FindProperty("meshWaves");
        bPreviewMode   = dimObj.FindProperty("previewMode");
        tTarget        = dimObj.FindProperty("target");



        fNow   = dimObj.FindProperty("now");
        config = dimObj.FindProperty("config");
        InitWaterConfig();

        UltimateToonWaterC UTW = (UltimateToonWaterC)target;

        UTW.Init();

        EditorApplication.update += Simulate;
    }