EnviroManagerInspector.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. namespace Enviro{
  6. [CustomEditor(typeof(EnviroManager))]
  7. public class EnviroManagerInspector : EnviroBaseInspector
  8. {
  9. private EnviroManager myTarget;
  10. private Editor currentTimeModuleEditor, currentSkyModuleEditor, currentLightingModuleEditor, currentFogModuleEditor, currentVolumetricCloudModuleEditor,currentFlatCloudModuleEditor,currentWeatherModuleEditor,currentAuroraModuleEditor,currentLightningModuleEditor, currentAudioModuleEditor,currentEnvironmentModuleEditor,currentEffectsModuleEditor ,currentQualityModuleEditor,currentEventModuleEditor ;
  11. private SerializedProperty configuration, modules, Camera, CameraTag, dontDestroyOnLoad;
  12. private SerializedProperty sunRotationX,sunRotationY,moonRotationX,moonRotationY;
  13. void OnEnable()
  14. {
  15. myTarget = (EnviroManager)target;
  16. serializedObj = new SerializedObject(myTarget);
  17. configuration = serializedObj.FindProperty("configuration");
  18. Camera = serializedObj.FindProperty("Camera");
  19. CameraTag = serializedObj.FindProperty("CameraTag");
  20. dontDestroyOnLoad = serializedObj.FindProperty("dontDestroyOnLoad");
  21. sunRotationX = serializedObj.FindProperty("sunRotationX");
  22. sunRotationY = serializedObj.FindProperty("sunRotationY");
  23. moonRotationX = serializedObj.FindProperty("moonRotationX");
  24. moonRotationY = serializedObj.FindProperty("moonRotationY");
  25. }
  26. public override void OnInspectorGUI()
  27. {
  28. SetupGUIStyles();
  29. GUILayout.BeginVertical("", boxStyle);
  30. GUILayout.Label("Enviro - Sky and Weather Manager",headerStyleMid);
  31. GUILayout.Space(5);
  32. GUILayout.Label("Version: 3.0.1", headerStyleMid);
  33. //Help Box Button
  34. //RenderHelpBoxButton();
  35. // if(showHelpBox)
  36. // RenderHelpBox("This is a help text test!");
  37. GUILayout.EndVertical();
  38. GUILayout.BeginVertical("",boxStyle);
  39. myTarget.showSetup = GUILayout.Toggle(myTarget.showSetup, "Setup", headerFoldout);
  40. EditorGUI.BeginChangeCheck();
  41. if(myTarget.showSetup)
  42. {
  43. GUILayout.BeginVertical("",boxStyleModified);
  44. GUILayout.Label("Scene", headerStyle);
  45. EditorGUILayout.PropertyField(dontDestroyOnLoad);
  46. GUILayout.Space(10);
  47. GUILayout.Label("Main Camera", headerStyle);
  48. EditorGUILayout.PropertyField(Camera);
  49. if(myTarget.Camera == null)
  50. CameraTag.stringValue = EditorGUILayout.TagField("Camera Tag", CameraTag.stringValue);
  51. GUILayout.Space(10);
  52. GUILayout.Label("Additional Cameras", headerStyle);
  53. GUILayout.Space(5);
  54. if (GUILayout.Button ("Add"))
  55. {
  56. myTarget.Cameras.Add (null);
  57. }
  58. GUILayout.Space(5);
  59. for (int i = 0; i < myTarget.Cameras.Count; i++)
  60. {
  61. GUILayout.BeginVertical("", boxStyleModified);
  62. myTarget.Cameras[i].camera = (Camera)EditorGUILayout.ObjectField ("Camera", myTarget.Cameras[i].camera, typeof(Camera), true);
  63. myTarget.Cameras[i].quality = (EnviroQuality)EditorGUILayout.ObjectField ("Quality", myTarget.Cameras[i].quality, typeof(EnviroQuality), true);
  64. if (GUILayout.Button ("Remove"))
  65. {
  66. myTarget.Cameras.RemoveAt (i);
  67. }
  68. GUILayout.EndVertical();
  69. }
  70. GUILayout.EndVertical();
  71. GUILayout.BeginVertical("", boxStyleModified);
  72. //GUILayout.Space(10);
  73. #if ENVIRO_HDRP
  74. GUILayout.Label("Render Pipeline: HDRP", headerStyle);
  75. #elif ENVIRO_URP
  76. GUILayout.Label("Render Pipeline: URP", headerStyle);
  77. #else
  78. GUILayout.Label("Render Pipeline: Legacy", headerStyle);
  79. #endif
  80. GUILayout.Space(10);
  81. #if !ENVIRO_HDRP
  82. if (GUILayout.Button("Activate HDRP Support"))
  83. {
  84. AddDefineSymbol("ENVIRO_HDRP");
  85. RemoveDefineSymbol("ENVIRO_URP");
  86. }
  87. #endif
  88. #if !ENVIRO_URP
  89. if (GUILayout.Button("Activate URP Support"))
  90. {
  91. AddDefineSymbol("ENVIRO_URP");
  92. RemoveDefineSymbol("ENVIRO_HDRP");
  93. }
  94. #endif
  95. #if ENVIRO_URP || ENVIRO_HDRP
  96. if (GUILayout.Button("Activate Legacy Support"))
  97. {
  98. RemoveDefineSymbol("ENVIRO_URP");
  99. RemoveDefineSymbol("ENVIRO_HDRP");
  100. }
  101. #endif
  102. GUILayout.EndVertical();
  103. }
  104. GUILayout.EndVertical();
  105. GUILayout.BeginVertical("Modules", boxStyle);
  106. GUILayout.Space(20);
  107. if(myTarget.configuration == null)
  108. {
  109. GUILayout.Label("Please assign or create a new configuration.");
  110. EditorGUILayout.PropertyField(configuration);
  111. if(GUILayout.Button("Create new Configuration"))
  112. {
  113. myTarget.configuration = EnviroConfigurationCreation.CreateMyAsset();
  114. serializedObj.Update();
  115. }
  116. }
  117. else
  118. {
  119. GUILayout.BeginVertical("", boxStyleModified);
  120. if(!Application.isPlaying)
  121. EditorGUILayout.PropertyField(configuration);
  122. if(GUILayout.Button("Save all Modules"))
  123. {
  124. myTarget.SaveAllModules();
  125. }
  126. if(GUILayout.Button("Load all Modules"))
  127. {
  128. myTarget.LoadAllModules();
  129. }
  130. GUILayout.EndVertical();
  131. GUILayout.BeginVertical("", wrapStyle);
  132. GUILayout.BeginHorizontal("", headerStyle);
  133. EditorGUI.BeginDisabledGroup(myTarget.Time != null);
  134. if(GUILayout.Button("Time"))
  135. {
  136. if (myTarget.Time == null)
  137. myTarget.AddModule(EnviroManager.ModuleType.Time);
  138. }
  139. EditorGUI.EndDisabledGroup();
  140. EditorGUI.BeginDisabledGroup(myTarget.Sky != null);
  141. if(GUILayout.Button("Sky"))
  142. {
  143. if (myTarget.Sky == null)
  144. myTarget.AddModule(EnviroManager.ModuleType.Sky);
  145. }
  146. EditorGUI.EndDisabledGroup();
  147. EditorGUI.BeginDisabledGroup(myTarget.Lighting != null);
  148. if(GUILayout.Button("Lighting"))
  149. {
  150. if (myTarget.Lighting == null)
  151. myTarget.AddModule(EnviroManager.ModuleType.Lighting);
  152. }
  153. EditorGUI.EndDisabledGroup();
  154. EditorGUI.BeginDisabledGroup(myTarget.Fog != null);
  155. if(GUILayout.Button("Fog"))
  156. {
  157. if (myTarget.Fog == null)
  158. myTarget.AddModule(EnviroManager.ModuleType.Fog);
  159. }
  160. EditorGUI.EndDisabledGroup();
  161. EditorGUI.BeginDisabledGroup(myTarget.VolumetricClouds != null);
  162. if(GUILayout.Button("Volumetric Clouds"))
  163. {
  164. if (myTarget.VolumetricClouds == null)
  165. myTarget.AddModule(EnviroManager.ModuleType.VolumetricClouds);
  166. }
  167. EditorGUI.BeginDisabledGroup(myTarget.FlatClouds != null);
  168. if(GUILayout.Button("Flat Clouds"))
  169. {
  170. if (myTarget.FlatClouds == null)
  171. myTarget.AddModule(EnviroManager.ModuleType.FlatClouds);
  172. }
  173. EditorGUI.EndDisabledGroup();
  174. EditorGUI.BeginDisabledGroup(myTarget.Aurora != null);
  175. if(GUILayout.Button("Aurora"))
  176. {
  177. if (myTarget.Aurora == null)
  178. myTarget.AddModule(EnviroManager.ModuleType.Aurora);
  179. }
  180. EditorGUI.EndDisabledGroup();
  181. EditorGUI.EndDisabledGroup();
  182. GUILayout.EndHorizontal();
  183. //////////////////////////////////////
  184. GUILayout.BeginHorizontal("", headerStyle);
  185. EditorGUI.BeginDisabledGroup(myTarget.Environment != null);
  186. if(GUILayout.Button("Environment"))
  187. {
  188. if (myTarget.Environment == null)
  189. myTarget.AddModule(EnviroManager.ModuleType.Environment);
  190. }
  191. EditorGUI.EndDisabledGroup();
  192. EditorGUI.BeginDisabledGroup(myTarget.Lightning != null);
  193. if(GUILayout.Button("Lightning"))
  194. {
  195. if (myTarget.Lightning == null)
  196. myTarget.AddModule(EnviroManager.ModuleType.Lightning);
  197. }
  198. EditorGUI.EndDisabledGroup();
  199. EditorGUI.BeginDisabledGroup(myTarget.Weather != null);
  200. if(GUILayout.Button("Weather"))
  201. {
  202. if (myTarget.Weather == null)
  203. myTarget.AddModule(EnviroManager.ModuleType.Weather);
  204. }
  205. EditorGUI.EndDisabledGroup();
  206. EditorGUI.BeginDisabledGroup(myTarget.Audio != null);
  207. if(GUILayout.Button("Audio"))
  208. {
  209. if (myTarget.Audio == null)
  210. myTarget.AddModule(EnviroManager.ModuleType.Audio);
  211. }
  212. EditorGUI.EndDisabledGroup();
  213. EditorGUI.BeginDisabledGroup(myTarget.Effects != null);
  214. if(GUILayout.Button("Effects"))
  215. {
  216. if (myTarget.Effects == null)
  217. myTarget.AddModule(EnviroManager.ModuleType.Effects);
  218. }
  219. EditorGUI.EndDisabledGroup();
  220. EditorGUI.BeginDisabledGroup(myTarget.Quality != null);
  221. if(GUILayout.Button("Quality"))
  222. {
  223. if (myTarget.Quality == null)
  224. myTarget.AddModule(EnviroManager.ModuleType.Quality);
  225. }
  226. EditorGUI.EndDisabledGroup();
  227. EditorGUI.BeginDisabledGroup(myTarget.Events != null);
  228. if(GUILayout.Button("Events"))
  229. {
  230. if (myTarget.Events == null)
  231. myTarget.AddModule(EnviroManager.ModuleType.Events);
  232. }
  233. EditorGUI.EndDisabledGroup();
  234. GUILayout.EndHorizontal();
  235. GUILayout.EndVertical();
  236. /////////Modules Start
  237. GUILayout.Space(10);
  238. if(myTarget.Time != null)
  239. {
  240. if(currentTimeModuleEditor == null)
  241. currentTimeModuleEditor = Editor.CreateEditor(myTarget.Time);
  242. currentTimeModuleEditor.OnInspectorGUI();
  243. }
  244. else
  245. {
  246. GUI.backgroundColor = baseModuleColor;
  247. GUILayout.BeginVertical("",boxStyleModified);
  248. GUI.backgroundColor = Color.white;
  249. EditorGUILayout.BeginHorizontal();
  250. myTarget.showNonTimeControls = GUILayout.Toggle(myTarget.showNonTimeControls, "Sun and Moon Controls", headerFoldout);
  251. EditorGUILayout.EndHorizontal();
  252. if(myTarget.showNonTimeControls)
  253. {
  254. EditorGUILayout.LabelField("This module will control your sun and moon position when no time module is used.");
  255. serializedObj.UpdateIfRequiredOrScript ();
  256. EditorGUI.BeginChangeCheck();
  257. GUI.backgroundColor = categoryModuleColor;
  258. GUILayout.BeginVertical("",boxStyleModified);
  259. GUI.backgroundColor = Color.white;
  260. EditorGUILayout.PropertyField(sunRotationX);
  261. EditorGUILayout.PropertyField(sunRotationY);
  262. EditorGUILayout.PropertyField(moonRotationX);
  263. EditorGUILayout.PropertyField(moonRotationY);
  264. GUILayout.EndVertical();
  265. }
  266. GUILayout.EndVertical();
  267. if(myTarget.showNonTimeControls)
  268. GUILayout.Space(10);
  269. }
  270. if(myTarget.Lighting != null)
  271. {
  272. if(currentLightingModuleEditor == null)
  273. currentLightingModuleEditor = Editor.CreateEditor(myTarget.Lighting);
  274. currentLightingModuleEditor.OnInspectorGUI();
  275. }
  276. if(myTarget.Sky != null)
  277. {
  278. if(currentSkyModuleEditor == null)
  279. currentSkyModuleEditor = Editor.CreateEditor(myTarget.Sky);
  280. currentSkyModuleEditor.OnInspectorGUI();
  281. }
  282. if(myTarget.Fog != null)
  283. {
  284. if(currentFogModuleEditor == null)
  285. currentFogModuleEditor = Editor.CreateEditor(myTarget.Fog);
  286. currentFogModuleEditor.OnInspectorGUI();
  287. }
  288. if(myTarget.VolumetricClouds != null)
  289. {
  290. if(currentVolumetricCloudModuleEditor == null)
  291. currentVolumetricCloudModuleEditor = Editor.CreateEditor(myTarget.VolumetricClouds);
  292. currentVolumetricCloudModuleEditor.OnInspectorGUI();
  293. }
  294. if(myTarget.FlatClouds != null)
  295. {
  296. if(currentFlatCloudModuleEditor == null)
  297. currentFlatCloudModuleEditor = Editor.CreateEditor(myTarget.FlatClouds);
  298. currentFlatCloudModuleEditor.OnInspectorGUI();
  299. }
  300. if(myTarget.Aurora != null)
  301. {
  302. if(currentAuroraModuleEditor == null)
  303. currentAuroraModuleEditor = Editor.CreateEditor(myTarget.Aurora);
  304. currentAuroraModuleEditor.OnInspectorGUI();
  305. }
  306. if(myTarget.Lightning != null)
  307. {
  308. if(currentLightningModuleEditor == null)
  309. currentLightningModuleEditor = Editor.CreateEditor(myTarget.Lightning);
  310. currentLightningModuleEditor.OnInspectorGUI();
  311. }
  312. if(myTarget.Environment != null)
  313. {
  314. if(currentEnvironmentModuleEditor == null)
  315. currentEnvironmentModuleEditor = Editor.CreateEditor(myTarget.Environment);
  316. currentEnvironmentModuleEditor.OnInspectorGUI();
  317. }
  318. if(myTarget.Weather != null)
  319. {
  320. if(currentWeatherModuleEditor == null)
  321. currentWeatherModuleEditor = Editor.CreateEditor(myTarget.Weather);
  322. currentWeatherModuleEditor.OnInspectorGUI();
  323. }
  324. if(myTarget.Audio != null)
  325. {
  326. if(currentAudioModuleEditor == null)
  327. currentAudioModuleEditor = Editor.CreateEditor(myTarget.Audio);
  328. currentAudioModuleEditor.OnInspectorGUI();
  329. }
  330. if(myTarget.Effects != null)
  331. {
  332. if(currentEffectsModuleEditor == null)
  333. currentEffectsModuleEditor = Editor.CreateEditor(myTarget.Effects);
  334. currentEffectsModuleEditor.OnInspectorGUI();
  335. }
  336. if(myTarget.Quality != null)
  337. {
  338. if(currentQualityModuleEditor == null)
  339. currentQualityModuleEditor = Editor.CreateEditor(myTarget.Quality);
  340. currentQualityModuleEditor.OnInspectorGUI();
  341. }
  342. if(myTarget.Events != null)
  343. {
  344. if(currentEventModuleEditor == null)
  345. currentEventModuleEditor = Editor.CreateEditor(myTarget.Events);
  346. currentEventModuleEditor.OnInspectorGUI();
  347. }
  348. }
  349. GUILayout.EndVertical();
  350. GUILayout.BeginVertical("",boxStyle);
  351. myTarget.showThirdParty = GUILayout.Toggle(myTarget.showThirdParty, "Third Party Support", headerFoldout);
  352. if(myTarget.showThirdParty)
  353. {
  354. GUILayout.Space(5);
  355. //WAPI
  356. GUI.backgroundColor = thirdPartyModuleColor;
  357. GUILayout.BeginVertical("World Manager API", boxStyleModified);
  358. GUI.backgroundColor = Color.white;
  359. GUILayout.Space(20);
  360. #if WORLDAPI_PRESENT
  361. //GUILayout.Label("World Manager API detected!", headerStyle);
  362. //GUILayout.Space(5);
  363. RenderIntegrationTextBox("You can add support for WAPI from the ('Components' -> 'Enviro 3' -> 'Integrations' -> 'WAPI') menu.");
  364. #else
  365. GUILayout.Label("World Manager API no found!", headerStyle);
  366. #endif
  367. GUILayout.EndVertical();
  368. //MicroSplat
  369. GUI.backgroundColor = thirdPartyModuleColor;
  370. GUILayout.BeginVertical("MicroSplat", boxStyleModified);
  371. GUI.backgroundColor = Color.white;
  372. GUILayout.Space(20);
  373. RenderIntegrationTextBox("You can add support for MicroSplat and Better Lit Shaders from the ('Components' -> 'Enviro 3' -> 'Integrations' -> 'Microsplat') menu.");
  374. GUILayout.EndVertical();
  375. //////////
  376. //Mirror
  377. GUI.backgroundColor = thirdPartyModuleColor;
  378. GUILayout.BeginVertical("Mirror Networking", boxStyleModified);
  379. GUI.backgroundColor = Color.white;
  380. GUILayout.Space(20);
  381. #if ENVIRO_MIRROR_SUPPORT
  382. //GUILayout.Label("Mirror Networking support activated.", headerStyle);
  383. //GUILayout.Space(5);
  384. RenderIntegrationTextBox("Please add the 'Mirror Server' component to a new GameObject in your scene. ('Components' -> 'Enviro 3' -> 'Integrations' -> 'Mirror Server')");
  385. RenderIntegrationTextBox("Please add the 'Mirror Player' component to your player prefab. ('Components' -> 'Enviro 3' -> 'Integrations' -> 'Mirror Player')");
  386. GUILayout.Space(10);
  387. if (GUILayout.Button("Deactivate Mirror Support"))
  388. {
  389. RemoveDefineSymbol("ENVIRO_MIRROR_SUPPORT");
  390. }
  391. #else
  392. if (GUILayout.Button("Activate Mirror Support"))
  393. {
  394. AddDefineSymbol("ENVIRO_MIRROR_SUPPORT");
  395. }
  396. if (GUILayout.Button("Deactivate Mirror Support"))
  397. {
  398. RemoveDefineSymbol("ENVIRO_MIRROR_SUPPORT");
  399. }
  400. #endif
  401. GUILayout.EndVertical();
  402. //////////
  403. }
  404. GUILayout.EndVertical();
  405. ApplyChanges();
  406. }
  407. }
  408. }