ToolSupervisor.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #if UNITY_EDITOR
  2. using UnityEditor;
  3. namespace O3DWB
  4. {
  5. public class ToolSupervisor
  6. {
  7. #region Constructors
  8. public ToolSupervisor()
  9. {
  10. EditorApplication.projectChanged -= RemoveNullPrefabReferences;
  11. EditorApplication.projectChanged += RemoveNullPrefabReferences;
  12. }
  13. #endregion
  14. #region Public Static Functions
  15. public static ToolSupervisor Get()
  16. {
  17. if (Octave3DWorldBuilder.ActiveInstance == null) return null;
  18. return Octave3DWorldBuilder.ActiveInstance.ToolSupervisor;
  19. }
  20. #endregion
  21. #region Public Methods
  22. public void Supervise()
  23. {
  24. RemoveInvalidEntityRefrences();
  25. }
  26. #endregion
  27. #region Private Methods
  28. private void RemoveInvalidEntityRefrences()
  29. {
  30. RemoveNullGameObjectReferences();
  31. }
  32. private void RemoveNullGameObjectReferences()
  33. {
  34. ObjectSelection.Get().RemoveNullGameObjectEntries();
  35. Octave3DWorldBuilder.ActiveInstance.PlacementObjectGroupDatabase.RemoveGroupsWithNullParents();
  36. ObjectSnapping.Get().ObjectSnapMask.RemoveInvalidEntries();
  37. DecorPaintObjectPlacement.Get().DecorPaintMask.RemoveInvalidEntries();
  38. /*if(PrefabTagDatabase.Get().ContainsNullEntries())
  39. {
  40. Debug.Log("Detected null prefab tag references. This bug has been fixed and should never happen. If you are reading this, please contact me.");
  41. List<PrefabCategory> allPrefabCategories = PrefabCategoryDatabase.Get().GetAllPrefabCategories();
  42. foreach(var category in allPrefabCategories)
  43. {
  44. List<Prefab> allPrefabsInCategory = category.GetAllPrefabs();
  45. foreach(var prefab in allPrefabsInCategory)
  46. {
  47. prefab.TagAssociations.RemoveNullEntries();
  48. }
  49. }
  50. PrefabTagDatabase.Get().RemoveNullEntries();
  51. }*/
  52. }
  53. public void RemoveNullPrefabReferences()
  54. {
  55. if (PrefabPreviewTextureCache.Get() == null) return;
  56. if (PrefabCategoryDatabase.Get() == null) return;
  57. if (DecorPaintObjectPlacementBrushDatabase.Get() == null) return;
  58. if (ObjectPlacement.Get() == null) return;
  59. PrefabPreviewTextureCache.Get().DestroyTexturesForNullPrefabEntries();
  60. PrefabCategoryDatabase.Get().RemoveNullPrefabEntriesInAllCategories();
  61. DecorPaintObjectPlacementBrushDatabase.Get().RemoveNullPrefabsFromAllBrushElements();
  62. ObjectPlacement.Get().PathObjectPlacement.PathSettings.TileConnectionSettings.RemoveNullPrefabReferences();
  63. }
  64. #endregion
  65. }
  66. }
  67. #endif