RealWorldTerrainPhase.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /* INFINITY CODE */
  2. /* https://infinity-code.com */
  3. using System.Collections.Generic;
  4. using InfinityCode.RealWorldTerrain.Net;
  5. using InfinityCode.RealWorldTerrain.Windows;
  6. using UnityEngine;
  7. namespace InfinityCode.RealWorldTerrain.Phases
  8. {
  9. public abstract class RealWorldTerrainPhase
  10. {
  11. public static float phaseProgress;
  12. public static bool phaseComplete;
  13. public static int index;
  14. public static RealWorldTerrainPhase activePhase;
  15. public static int activePhaseIndex;
  16. public static List<RealWorldTerrainPhase> requiredPhases;
  17. protected static bool generateInThread
  18. {
  19. get { return RealWorldTerrainWindow.generateInThread; }
  20. }
  21. protected static bool isCapturing
  22. {
  23. get { return RealWorldTerrainWindow.isCapturing; }
  24. set { RealWorldTerrainWindow.isCapturing = value; }
  25. }
  26. protected static RealWorldTerrainPrefs prefs
  27. {
  28. get { return RealWorldTerrainWindow.prefs; }
  29. }
  30. public static float progress
  31. {
  32. get { return RealWorldTerrainWindow.progress; }
  33. set
  34. {
  35. RealWorldTerrainWindow.progress = value;
  36. if (RealWorldTerrainWindow.wnd != null) RealWorldTerrainWindow.wnd.Repaint();
  37. }
  38. }
  39. protected static RealWorldTerrainVector2i terrainCount
  40. {
  41. get { return prefs.terrainCount; }
  42. }
  43. protected static RealWorldTerrainItem[,] terrains
  44. {
  45. get { return RealWorldTerrainWindow.terrains; }
  46. }
  47. protected static RealWorldTerrainVector2i textureCount
  48. {
  49. get { return prefs.textureCount; }
  50. }
  51. public abstract string title { get; }
  52. public virtual void Complete()
  53. {
  54. phaseProgress = 0;
  55. phaseComplete = false;
  56. index = 0;
  57. NextPhase();
  58. }
  59. public abstract void Enter();
  60. public virtual void Finish()
  61. {
  62. }
  63. public static void Init()
  64. {
  65. requiredPhases = new List<RealWorldTerrainPhase>();
  66. activePhaseIndex = -1;
  67. if (RealWorldTerrainDownloadManager.count > 0) requiredPhases.Add(new RealWorldTerrainDownloadingPhase());
  68. bool gFull = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.full;
  69. bool gTerrain = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.terrain;
  70. bool gTexture = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.texture;
  71. bool gAdditional = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.additional;
  72. bool gGaia = gFull && prefs.resultType == RealWorldTerrainResultType.gaiaStamp;
  73. bool gRaw = gFull && prefs.resultType == RealWorldTerrainResultType.rawFile;
  74. bool isHeightmapOnly = gGaia || gRaw;
  75. bool nLoadHeightmap = !gTexture;
  76. bool nGenHeightmap = gFull || gTerrain;
  77. bool nTexture = (gFull || gTexture) && prefs.generateTextures;
  78. bool nAdditional = gFull || gAdditional;
  79. if (isHeightmapOnly)
  80. {
  81. nGenHeightmap = false;
  82. nTexture = false;
  83. nAdditional = false;
  84. }
  85. if (nLoadHeightmap)
  86. {
  87. requiredPhases.Add(new RealWorldTerrainUnzipHeightmapPhase());
  88. requiredPhases.Add(new RealWorldTerrainLoadHeightmapPhase());
  89. }
  90. if (!isHeightmapOnly)
  91. {
  92. if (gFull) requiredPhases.Add(new RealWorldTerrainGenerateTerrainsPhase());
  93. else requiredPhases.Add(new RealWorldTerrainLoadTerrainsPhase());
  94. }
  95. if (nGenHeightmap)
  96. {
  97. if (prefs.resultType == RealWorldTerrainResultType.terrain)
  98. {
  99. requiredPhases.Add(new RealWorldTerrainGenerateHeightmapsPhase());
  100. if (prefs.terrainCount > 1) requiredPhases.Add(new RealWorldTerrainAdjustEdgesPhase());
  101. }
  102. else if (prefs.resultType == RealWorldTerrainResultType.mesh)
  103. {
  104. requiredPhases.Add(new RealWorldTerrainGenerateMeshVerticesPhase());
  105. requiredPhases.Add(new RealWorldTerrainGenerateMeshesPhase());
  106. requiredPhases.Add(new RealWorldTerrainInstantiateMeshesPhase());
  107. }
  108. }
  109. #if GAIA_PRESENT || GAIA_PRO_PRESENT || GAIA_2_PRESENT
  110. if (gGaia) requiredPhases.Add(new RealWorldTerrainGenerateGaiaStampPhase());
  111. #endif
  112. if (gRaw) requiredPhases.Add(new RealWorldTerrainGenerateRAWPhase());
  113. if (nTexture) requiredPhases.Add(new RealWorldTerrainGenerateTexturesPhase());
  114. if (nAdditional)
  115. {
  116. if (prefs.generateBuildings)
  117. {
  118. requiredPhases.Add(new RealWorldTerrainGenerateBuildingsPhase());
  119. if (prefs.buildingGenerator == 0 && prefs.buildingSaveInResult) requiredPhases.Add(new RealWorldTerrainSaveBuildingsPhase());
  120. }
  121. if (prefs.generateRoads) requiredPhases.Add(new RealWorldTerrainGenerateRoadsPhase());
  122. if (prefs.generateGrass) requiredPhases.Add(new RealWorldTerrainGenerateGrassPhase());
  123. if (prefs.generateTrees) requiredPhases.Add(new RealWorldTerrainGenerateTreesPhase());
  124. if (prefs.generateRivers) requiredPhases.Add(new RealWorldTerrainGenerateRiversPhase());
  125. }
  126. requiredPhases.Add(new RealWorldTerrainFinishPhase());
  127. activePhase = null;
  128. RealWorldTerrainImporter.showMessage = false;
  129. NextPhase();
  130. }
  131. public static void NextPhase()
  132. {
  133. if (activePhase != null) activePhase.Finish();
  134. activePhaseIndex++;
  135. if (requiredPhases == null || activePhaseIndex >= requiredPhases.Count)
  136. {
  137. Debug.Log("No active phase");
  138. activePhase = null;
  139. RealWorldTerrainWindow.Dispose();
  140. return;
  141. }
  142. activePhase = requiredPhases[activePhaseIndex];
  143. RealWorldTerrainWindowUI.phasetitle = activePhase.title;
  144. progress = 0;
  145. RealWorldTerrainWindow.wnd.Repaint();
  146. activePhase.Start();
  147. }
  148. public virtual void Start()
  149. {
  150. }
  151. }
  152. }