@@ -124,11 +124,7 @@ private static void TextureChanged(Terrain terrain, string textureName, RectInt
124124 /// <param name="topology">The Topology layer to change to.</param>
125125 public static void ChangeLandLayer ( LandLayers layer , int topology = 0 )
126126 {
127- if ( layer == LandLayers . Alpha )
128- return ;
129- if ( layer == LandLayer )
130- SaveLayer ( LastTopologyLayer ) ;
131- SetLayer ( layer , topology ) ;
127+ EditorCoroutineUtility . StartCoroutineOwnerless ( Coroutine . ChangeLayer ( layer , topology ) ) ;
132128 }
133129
134130 /// <summary>Returns the SplatMap at the selected LandLayer.</summary>
@@ -195,27 +191,10 @@ public static void SetLayer(LandLayers layer, int topology = 0)
195191 }
196192
197193 /// <summary>Saves any changes made to the Alphamaps, like the paint brush.</summary>
198- /// <param name="topologyLayer ">The Topology layer, if active.</param>
199- public static void SaveLayer ( int topologyLayer = 0 )
194+ /// <param name="topology ">The Topology layer, if active.</param>
195+ public static void SaveLayer ( )
200196 {
201- if ( LayerSet == false )
202- {
203- Debug . LogError ( "Saving Layer before layer is set" ) ;
204- return ;
205- }
206-
207- switch ( LandLayer )
208- {
209- case LandLayers . Ground :
210- GroundArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
211- break ;
212- case LandLayers . Biome :
213- BiomeArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
214- break ;
215- case LandLayers . Topology :
216- TopologyArray [ topologyLayer ] = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
217- break ;
218- }
197+ EditorCoroutineUtility . StartCoroutineOwnerless ( Coroutine . SaveLayer ( ) ) ;
219198 }
220199
221200 private static void GetTextures ( )
@@ -274,10 +253,24 @@ private static TerrainLayer[] GetGroundTextures()
274253
275254 private class Coroutines
276255 {
256+ public IEnumerator ChangeLayer ( LandLayers layer , int topology = 0 )
257+ {
258+ yield return EditorCoroutineUtility . StartCoroutineOwnerless ( SaveLayerCoroutine ( ) ) ;
259+ yield return EditorCoroutineUtility . StartCoroutineOwnerless ( SetLayerCoroutine ( layer , topology ) ) ;
260+ LayerSet = true ;
261+ }
262+
277263 public IEnumerator SetLayer ( LandLayers layer , int topology = 0 )
278264 {
279265 yield return EditorCoroutineUtility . StartCoroutineOwnerless ( SetLayerCoroutine ( layer , topology ) ) ;
280266 LayerSet = true ;
267+ foreach ( var item in Land . terrainData . alphamapTextures )
268+ Undo . ClearUndo ( item ) ;
269+ }
270+
271+ public IEnumerator SaveLayer ( )
272+ {
273+ yield return EditorCoroutineUtility . StartCoroutineOwnerless ( SaveLayerCoroutine ( ) ) ;
281274 }
282275
283276 private IEnumerator SetLayerCoroutine ( LandLayers layer , int topology = 0 )
@@ -307,6 +300,28 @@ private IEnumerator SetLayerCoroutine(LandLayers layer, int topology = 0)
307300 TopologyLayer = ( TerrainTopology . Enum ) TerrainTopology . IndexToType ( topology ) ;
308301 yield return null ;
309302 }
303+
304+ private IEnumerator SaveLayerCoroutine ( )
305+ {
306+ while ( ! LayerSet )
307+ {
308+ yield return null ;
309+ }
310+
311+ switch ( LandLayer )
312+ {
313+ case LandLayers . Ground :
314+ GroundArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
315+ break ;
316+ case LandLayers . Biome :
317+ BiomeArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
318+ break ;
319+ case LandLayers . Topology :
320+ TopologyArray [ LastTopologyLayer ] = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
321+ break ;
322+ }
323+ yield return null ;
324+ }
310325 }
311326 }
312327}
0 commit comments