@@ -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,12 +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 ;
281267 }
282268
269+ public IEnumerator SaveLayer ( )
270+ {
271+ yield return EditorCoroutineUtility . StartCoroutineOwnerless ( SaveLayerCoroutine ( ) ) ;
272+ }
273+
283274 private IEnumerator SetLayerCoroutine ( LandLayers layer , int topology = 0 )
284275 {
285276 if ( GroundTextures == null || BiomeTextures == null || MiscTextures == null )
@@ -307,6 +298,28 @@ private IEnumerator SetLayerCoroutine(LandLayers layer, int topology = 0)
307298 TopologyLayer = ( TerrainTopology . Enum ) TerrainTopology . IndexToType ( topology ) ;
308299 yield return null ;
309300 }
301+
302+ private IEnumerator SaveLayerCoroutine ( )
303+ {
304+ while ( ! LayerSet )
305+ {
306+ yield return null ;
307+ }
308+
309+ switch ( LandLayer )
310+ {
311+ case LandLayers . Ground :
312+ GroundArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
313+ break ;
314+ case LandLayers . Biome :
315+ BiomeArray = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
316+ break ;
317+ case LandLayers . Topology :
318+ TopologyArray [ LastTopologyLayer ] = Land . terrainData . GetAlphamaps ( 0 , 0 , Land . terrainData . alphamapWidth , Land . terrainData . alphamapHeight ) ;
319+ break ;
320+ }
321+ yield return null ;
322+ }
310323 }
311324 }
312325}
0 commit comments