void UpdateTerrainReference(Terrain terrain)
        {
            _terrain = terrain;
            MeshRenderer quad = GetComponent<MeshRenderer>();

            if (_terrain==null) {
                if (!quad.enabled)
                    quad.enabled = true;
                if (transform.parent!=null) {
                    transform.SetParent(null);
                    transform.localScale = new Vector3(100,100,1);
                    transform.localRotation = Quaternion.Euler(0,0,0);
                }
                MeshCollider mc = GetComponent<MeshCollider>();
                if (mc==null) gameObject.AddComponent<MeshCollider>();
            } else {
                transform.SetParent(_terrain.transform, false);
                if (quad.enabled) {
                    quad.enabled = false;
                }
                if (_terrain.GetComponent<TerrainTrigger>()==null) {
                    _terrain.gameObject.AddComponent<TerrainTrigger>();
                }
                MeshCollider mc = GetComponent<MeshCollider>();
                if (mc!=null) DestroyImmediate(mc);
                lastCamPos = Camera.main.transform.position - Vector3.up; // just to force update on first frame
                FitToTerrain ();
                lastCamPos = Camera.main.transform.position - Vector3.up; // just to force update on first update as well
                if (CalculateTerrainRoughness ()) {
                    refreshMesh = true;
                    // Clear geometry
                    if (cellLayer != null) {
                        DestroyImmediate (cellLayer);
                    }
                    if (territoryLayer != null) {
                        DestroyImmediate (territoryLayer);
                    }
                }

            }
        }