Skip to content

Commit ea6619a

Browse files
authored
Compatibility fix for 2019.4.40f1 (#371)
1 parent 3dc9f57 commit ea6619a

File tree

2 files changed

+54
-41
lines changed

2 files changed

+54
-41
lines changed

Plugins/Editor/Scripts/Control/Managers/InternalCSGModelManager.Lifetime.cs

+40-40
Original file line numberDiff line numberDiff line change
@@ -163,57 +163,57 @@ public static void OnEnterPlayMode()
163163
if (CSGProjectSettings.Instance.SaveMeshesInSceneFiles)
164164
return;
165165

166-
static bool ensureExternalMethodsPopulated()
167-
{
168-
if (External == null ||
169-
External.ResetCSG == null)
170-
{
171-
NativeMethodBindings.RegisterUnityMethods();
172-
NativeMethodBindings.RegisterExternalMethods();
173-
}
174-
175-
if (External == null)
176-
{
177-
Debug.LogError("RealtimeCSG: Cannot rebuild meshes for some reason. External modules not loaded. Please save meshes into the Scene.");
178-
return false;
179-
}
180-
181-
return true;
182-
}
183-
184-
static void rebuildMeshes()
185-
{
186-
if (!ensureExternalMethodsPopulated())
187-
return;
166+
if (!ensureExternalMethodsPopulated())
167+
return;
188168

189-
RealtimeCSG.CSGModelManager.AllowInEditorPlayMode = true;
190-
InternalCSGModelManager.Shutdown();
191-
DoForcedMeshUpdate();
192-
InternalCSGModelManager.CheckForChanges(false);
193-
RealtimeCSG.CSGModelManager.AllowInEditorPlayMode = false;
194-
}
169+
EditorApplication.playModeStateChanged += onPlayModeChange;
170+
UnityEngine.SceneManagement.SceneManager.sceneLoaded += sceneLoaded;
171+
}
195172

196-
static void sceneLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)
173+
static bool ensureExternalMethodsPopulated()
174+
{
175+
if (External == null ||
176+
External.ResetCSG == null)
197177
{
198-
rebuildMeshes();
178+
NativeMethodBindings.RegisterUnityMethods();
179+
NativeMethodBindings.RegisterExternalMethods();
199180
}
200181

201-
static void onPlayModeChange(PlayModeStateChange playMode)
182+
if (External == null)
202183
{
203-
if (playMode == PlayModeStateChange.EnteredEditMode)
204-
{
205-
UnityEngine.SceneManagement.SceneManager.sceneLoaded -= sceneLoaded;
206-
EditorApplication.playModeStateChanged -= onPlayModeChange;
207-
208-
rebuildMeshes();
209-
}
184+
Debug.LogError("RealtimeCSG: Cannot rebuild meshes for some reason. External modules not loaded. Please save meshes into the Scene.");
185+
return false;
210186
}
211187

188+
return true;
189+
}
190+
191+
static void rebuildMeshes()
192+
{
212193
if (!ensureExternalMethodsPopulated())
213194
return;
214195

215-
EditorApplication.playModeStateChanged += onPlayModeChange;
216-
UnityEngine.SceneManagement.SceneManager.sceneLoaded += sceneLoaded;
196+
RealtimeCSG.CSGModelManager.AllowInEditorPlayMode = true;
197+
InternalCSGModelManager.Shutdown();
198+
DoForcedMeshUpdate();
199+
InternalCSGModelManager.CheckForChanges(false);
200+
RealtimeCSG.CSGModelManager.AllowInEditorPlayMode = false;
201+
}
202+
203+
static void sceneLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)
204+
{
205+
rebuildMeshes();
206+
}
207+
208+
static void onPlayModeChange(PlayModeStateChange playMode)
209+
{
210+
if (playMode == PlayModeStateChange.EnteredEditMode)
211+
{
212+
UnityEngine.SceneManagement.SceneManager.sceneLoaded -= sceneLoaded;
213+
EditorApplication.playModeStateChanged -= onPlayModeChange;
214+
215+
rebuildMeshes();
216+
}
217217
}
218218
#endif
219219
}

Plugins/Editor/Scripts/Control/Managers/InternalCSGModelManager.UpdateMeshes.cs

+14-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using InternalRealtimeCSG;
66
using RealtimeCSG.Foundation;
77
using RealtimeCSG.Components;
8+
using UnityEngine.SceneManagement;
89

910
namespace RealtimeCSG
1011
{
@@ -598,7 +599,19 @@ public static bool UpdateMeshes(System.Text.StringBuilder text = null, bool forc
598599
[MenuItem("Edit/Realtime-CSG/Destroy All Helper Surface Meshes In Scene")]
599600
public static void DestroyAllHelperSurfaceCSGMeshes()
600601
{
601-
var allMeshesInScene = UnityEngine.Object.FindObjectsOfType<Mesh>(true);
602+
var allMeshesInScene = new List<Mesh>();
603+
for(int i = 0; i< SceneManager.sceneCount; i++)
604+
{
605+
var s = SceneManager.GetSceneAt(i);
606+
if (s.isLoaded == false)
607+
continue;
608+
609+
foreach (var go in s.GetRootGameObjects())
610+
{
611+
foreach (var filter in go.GetComponentsInChildren<MeshFilter>(true))
612+
allMeshesInScene.Add(filter.sharedMesh);
613+
}
614+
}
602615

603616
// regex matches all possible names for the helper surfaces that we can generate
604617
var nameMatch = new System.Text.RegularExpressions.Regex(

0 commit comments

Comments
 (0)