Skip to content

Commit b0563bf

Browse files
committed
TerrainManager Coroutines
- Moved SaveLayer and ChangeLayer over to Coroutines. - Fixed layers not being saved on ChangeLandLayer. - Fixed LastTopologyLayer not being used when saving layers.
1 parent 7345dfc commit b0563bf

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

Assets/MapEditor/Managers/MapManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ public static void Load(WorldSerialization world, string loadPath = "")
10901090
/// <param name="path">The path to save to.</param>
10911091
public static void Save(string path)
10921092
{
1093-
SaveLayer(TerrainTopology.TypeToIndex((int)TopologyLayer));
1093+
SaveLayer();
10941094
ProgressBarManager.Display("Saving Map: " + path, "Saving Prefabs ", 0.4f);
10951095
WorldSerialization world = TerrainToWorld(Land, Water);
10961096
ProgressBarManager.Display("Saving Map: " + path, "Saving to disk ", 0.8f);

Assets/MapEditor/Managers/TerrainManager.cs

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)