RealWorldTerrainSaveBuildingsPhase.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /* INFINITY CODE */
  2. /* https://infinity-code.com */
  3. using System;
  4. using System.Collections.Generic;
  5. using UnityEditor;
  6. using UnityEngine;
  7. namespace InfinityCode.RealWorldTerrain.Phases
  8. {
  9. public class RealWorldTerrainSaveBuildingsPhase : RealWorldTerrainPhase
  10. {
  11. public static List<SavableRenderer> renderersToSave
  12. {
  13. get
  14. {
  15. if (_renderersToSave == null) _renderersToSave = new List<SavableRenderer>();
  16. return _renderersToSave;
  17. }
  18. }
  19. public static Dictionary<MeshFilter, string> filtersToSave
  20. {
  21. get
  22. {
  23. if (_filtersToSave == null) _filtersToSave = new Dictionary<MeshFilter, string>();
  24. return _filtersToSave;
  25. }
  26. }
  27. private static Dictionary<MeshFilter, string> _filtersToSave;
  28. private static List<SavableRenderer> _renderersToSave;
  29. public override string title
  30. {
  31. get { return "Save Buildings..."; }
  32. }
  33. public override void Enter()
  34. {
  35. try
  36. {
  37. if (prefs.buildingGenerator != 0) return;
  38. AssetDatabase.StartAssetEditing();
  39. if (renderersToSave != null)
  40. {
  41. foreach (var savableRenderer in renderersToSave)
  42. {
  43. try
  44. {
  45. Material material = savableRenderer.renderer.sharedMaterials[savableRenderer.index];
  46. AssetDatabase.CreateAsset(material, savableRenderer.path);
  47. }
  48. catch
  49. {
  50. }
  51. }
  52. }
  53. if (filtersToSave != null)
  54. {
  55. foreach (var pair in filtersToSave)
  56. {
  57. try
  58. {
  59. AssetDatabase.CreateAsset(pair.Key.sharedMesh, pair.Value);
  60. }
  61. catch
  62. {
  63. }
  64. }
  65. }
  66. AssetDatabase.StopAssetEditing();
  67. if (renderersToSave != null)
  68. {
  69. foreach (var savableRenderer in renderersToSave)
  70. {
  71. try
  72. {
  73. savableRenderer.renderer.sharedMaterials[savableRenderer.index] = AssetDatabase.LoadAssetAtPath<Material>(savableRenderer.path);
  74. }
  75. catch
  76. {
  77. }
  78. }
  79. }
  80. if (filtersToSave != null)
  81. {
  82. foreach (var pair in filtersToSave)
  83. {
  84. try
  85. {
  86. pair.Key.sharedMesh = AssetDatabase.LoadAssetAtPath<Mesh>(pair.Value);
  87. }
  88. catch
  89. {
  90. }
  91. }
  92. }
  93. }
  94. catch (Exception exception)
  95. {
  96. Debug.Log(exception.Message);
  97. throw;
  98. }
  99. _renderersToSave = null;
  100. _filtersToSave = null;
  101. Complete();
  102. }
  103. public class SavableRenderer
  104. {
  105. public string path;
  106. public int index;
  107. public MeshRenderer renderer;
  108. }
  109. }
  110. }