ProFlareBatchInspector.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. 
  2. /// ProFlares - v1.08 - Copyright 2014-2015 All rights reserved - ProFlares.com
  3. /// <summary>
  4. /// ProFlareBatchInspector.cs
  5. /// Custom inspector for the ProFlareBatch
  6. /// </summary>
  7. using UnityEngine;
  8. using UnityEditor;
  9. using System.Collections;
  10. [CustomEditor(typeof(ProFlareBatch))]
  11. public class ProFlareBatchInspector : Editor {
  12. ProFlareBatch _ProFlareBatch;
  13. // Use this for initialization
  14. bool Updated;
  15. string occluded = "Occluded";
  16. public override void OnInspectorGUI () {
  17. GUIStyle title = FlareEditorHelper.TitleStyle();
  18. FlareEditorHelper.DrawGuiDivider();
  19. EditorGUILayout.LabelField("Pro Flare Batch :",title);
  20. GUILayout.Space(10f);
  21. _ProFlareBatch = target as ProFlareBatch;
  22. //base.DrawDefaultInspector();
  23. _ProFlareBatch.debugMessages = EditorGUILayout.Toggle("Debug Messages",_ProFlareBatch.debugMessages);
  24. EditorGUILayout.BeginHorizontal();
  25. EditorGUILayout.LabelField("Mode",GUILayout.MaxWidth(100));
  26. ProFlareBatch.Mode _mode = (ProFlareBatch.Mode)EditorGUILayout.EnumPopup(_ProFlareBatch.mode);
  27. if(_mode != _ProFlareBatch.mode){
  28. _ProFlareBatch.mode = _mode;
  29. switch(_mode){
  30. case(ProFlareBatch.Mode.Standard):{
  31. _ProFlareBatch.SingleCamera_Mode = false;
  32. //_ProFlareBatch.VR_Mode = false;
  33. }break;
  34. case(ProFlareBatch.Mode.SingleCamera):{
  35. _ProFlareBatch.SingleCamera_Mode = true;
  36. //_ProFlareBatch.VR_Mode = false;
  37. }break;
  38. //case(ProFlareBatch.Mode.VR):{
  39. // _ProFlareBatch.SingleCamera_Mode = false;
  40. // _ProFlareBatch.VR_Mode = true;
  41. //}break;
  42. }
  43. Updated = true;
  44. }
  45. EditorGUILayout.EndHorizontal();
  46. ProFlareAtlas _atlas = EditorGUILayout.ObjectField("Flare Atlas", _ProFlareBatch._atlas, typeof(ProFlareAtlas), false) as ProFlareAtlas;
  47. if(!_ProFlareBatch._atlas){
  48. EditorGUILayout.HelpBox("Assign a Flare Atlas.", MessageType.Error,false);
  49. }
  50. Camera _camera = EditorGUILayout.ObjectField("Game Camera", _ProFlareBatch.GameCamera, typeof(Camera), true) as Camera;
  51. if(_camera != _ProFlareBatch.GameCamera){
  52. Updated = true;
  53. _ProFlareBatch.GameCamera = _camera;
  54. if(_ProFlareBatch.GameCamera)
  55. _ProFlareBatch.GameCameraTrans = _camera.transform;
  56. }
  57. if(_ProFlareBatch.GameCamera == null)
  58. EditorGUILayout.HelpBox("Assign Game Camera.", MessageType.Warning,false);
  59. _ProFlareBatch.FlareCamera = EditorGUILayout.ObjectField("Flare Camera", _ProFlareBatch.FlareCamera, typeof(Camera), true) as Camera;
  60. Texture2D temp2D = null;
  61. if (_atlas != _ProFlareBatch._atlas)
  62. {
  63. if(_atlas == null)
  64. _ProFlareBatch._atlas = null;
  65. else
  66. if(_atlas.texture != null){
  67. if(_ProFlareBatch.VR_Mode)
  68. _ProFlareBatch.name = "ProFlareBatch_VR ("+_atlas.gameObject.name+")";
  69. else
  70. _ProFlareBatch.name = "ProFlareBatch ("+_atlas.gameObject.name+")";
  71. _ProFlareBatch._atlas = _atlas;
  72. _ProFlareBatch.ForceRefresh();
  73. Updated = true;
  74. _ProFlareBatch.mat.mainTexture = _ProFlareBatch._atlas.texture;
  75. _ProFlareBatch.dirty = true;
  76. ProFlare[] flares = GameObject.FindObjectsOfType(typeof(ProFlare)) as ProFlare[];
  77. foreach(ProFlare flare in flares){
  78. flare.ReInitialise();
  79. }
  80. }else{
  81. Debug.LogError("ProFlares - Atlas missing texture, Atlas not assigned.");
  82. }
  83. }
  84. /*if(_ProFlareBatch.mode == ProFlareBatch.Mode.VR){
  85. EditorGUILayout.BeginHorizontal();
  86. EditorGUILayout.LabelField("VR Flare Depth");
  87. _ProFlareBatch.VR_Depth = EditorGUILayout.Slider(_ProFlareBatch.VR_Depth,0f,1f);
  88. EditorGUILayout.EndHorizontal();
  89. }*/
  90. if (_ProFlareBatch._atlas)
  91. {
  92. if(_ProFlareBatch.mat)
  93. if(Application.isPlaying || (_ProFlareBatch.mat.mainTexture == null))
  94. if(_atlas.texture != null)
  95. _ProFlareBatch.mat.mainTexture = _atlas.texture;
  96. FlareEditorHelper.DrawGuiDivider();
  97. EditorGUILayout.BeginHorizontal();
  98. EditorGUILayout.LabelField("Connected Flares :",title);
  99. if(GUILayout.Button("Force Refresh",GUILayout.MaxWidth(120))){
  100. _ProFlareBatch.ForceRefresh();
  101. ProFlare[] flares = GameObject.FindObjectsOfType(typeof(ProFlare)) as ProFlare[];
  102. foreach(ProFlare flare in flares){
  103. flare.ReInitialise();
  104. }
  105. Updated = true;
  106. }
  107. EditorGUILayout.EndHorizontal();
  108. GUILayout.Space(9f);
  109. // if(_ProFlareBatch.Flares.Count != ProFlareBatch.FlaresList.Count){
  110. // }
  111. if(_ProFlareBatch.FlaresList.Count < 1)
  112. EditorGUILayout.LabelField("No Connected flares");
  113. else{
  114. EditorGUILayout.LabelField(_ProFlareBatch.FlaresList.Count.ToString()+" Flares Connected");
  115. if(_ProFlareBatch.FlaresList.Count < 10)
  116. _ProFlareBatch.showAllConnectedFlares = EditorGUILayout.Toggle("Show All Connected Flares",_ProFlareBatch.showAllConnectedFlares);
  117. for(int i = 0; i < _ProFlareBatch.FlaresList.Count; i++){
  118. if(_ProFlareBatch.FlaresList[i].flare == null)
  119. continue;
  120. EditorGUILayout.BeginHorizontal();
  121. if(_ProFlareBatch.FlaresList[i].occlusion == null)
  122. continue;
  123. if(!_ProFlareBatch.FlaresList[i].occlusion.occluded)
  124. EditorGUILayout.LabelField((i+1).ToString()+" - "+_ProFlareBatch.FlaresList[i].flare.gameObject.name+" - "+_ProFlareBatch.FlaresList[i].occlusion._CullingState.ToString());
  125. else
  126. EditorGUILayout.LabelField((i+1).ToString()+" - "+_ProFlareBatch.FlaresList[i].flare.gameObject.name+" - "+_ProFlareBatch.FlaresList[i].occlusion._CullingState.ToString()+" - "+occluded);
  127. if(GUILayout.Button("Select",GUILayout.Width(60)))
  128. {
  129. Selection.activeGameObject = _ProFlareBatch.FlaresList[i].flare.gameObject;
  130. }
  131. EditorGUILayout.EndHorizontal();
  132. if(i > 10){
  133. if(!_ProFlareBatch.showAllConnectedFlares)
  134. break;
  135. }
  136. }
  137. }
  138. FlareEditorHelper.DrawGuiDivider();
  139. EditorGUILayout.LabelField("Settings :",title);
  140. GUILayout.Space(9f);
  141. _ProFlareBatch.zPos = EditorGUILayout.FloatField("Z Position",_ProFlareBatch.zPos);
  142. FlareEditorHelper.DrawGuiDivider();
  143. EditorGUILayout.LabelField("Optimizations :",title);
  144. EditorGUILayout.BeginHorizontal();
  145. EditorGUILayout.LabelField("Use Flare Culling");
  146. _ProFlareBatch.useCulling = EditorGUILayout.Toggle(_ProFlareBatch.useCulling);
  147. GUI.enabled = _ProFlareBatch.useCulling;
  148. EditorGUILayout.EndHorizontal();
  149. EditorGUILayout.BeginHorizontal();
  150. EditorGUILayout.LabelField("Cull Flares After Seconds ");
  151. _ProFlareBatch.cullFlaresAfterTime = EditorGUILayout.IntField(_ProFlareBatch.cullFlaresAfterTime);
  152. EditorGUILayout.EndHorizontal();
  153. EditorGUILayout.BeginHorizontal();
  154. EditorGUILayout.LabelField("Cull Flares when can cull # Flares ");
  155. _ProFlareBatch.cullFlaresAfterCount = EditorGUILayout.IntField(_ProFlareBatch.cullFlaresAfterCount);
  156. EditorGUILayout.EndHorizontal();
  157. GUI.enabled = true;
  158. GUILayout.Space(8f);
  159. EditorGUILayout.BeginVertical("box");
  160. EditorGUILayout.BeginHorizontal();
  161. EditorGUILayout.LabelField("Use Brightness Culling");
  162. _ProFlareBatch.useBrightnessThreshold = EditorGUILayout.Toggle(_ProFlareBatch.useBrightnessThreshold);
  163. EditorGUILayout.EndHorizontal();
  164. GUI.enabled = _ProFlareBatch.useBrightnessThreshold;
  165. _ProFlareBatch.BrightnessThreshold = Mathf.Clamp(EditorGUILayout.IntField(" Minimum Brightness",_ProFlareBatch.BrightnessThreshold),0,255);
  166. GUI.enabled = true;
  167. EditorGUILayout.EndVertical();
  168. if(Application.isPlaying)
  169. GUI.enabled = false;
  170. else
  171. GUI.enabled = true;
  172. FlareEditorHelper.DrawGuiDivider();
  173. EditorGUILayout.LabelField("Debug :",title);
  174. GUILayout.Space(8f);
  175. EditorGUILayout.BeginVertical("box");
  176. EditorGUILayout.LabelField("Flare Count : " + _ProFlareBatch.FlaresList.Count);
  177. EditorGUILayout.LabelField("Flare Elements : " + _ProFlareBatch.FlareElements.Count);
  178. //if(_ProFlareBatch.meshFilter){
  179. // EditorGUILayout.LabelField("Triangle Count : " + (_ProFlareBatch.meshFilter.sharedMesh.triangles.Length/3).ToString());
  180. // EditorGUILayout.LabelField("Vertex Count : " + _ProFlareBatch.meshFilter.sharedMesh.vertexCount.ToString());
  181. //}
  182. EditorGUILayout.BeginHorizontal();
  183. EditorGUILayout.LabelField("Show Overdraw",GUILayout.MaxWidth(160));
  184. //_ProFlareBatch.useBrightnessThreshold = EditorGUILayout.Toggle(_ProFlareBatch.useBrightnessThreshold);
  185. bool overdraw = EditorGUILayout.Toggle(_ProFlareBatch.overdrawDebug);
  186. EditorGUILayout.EndHorizontal();
  187. EditorGUILayout.EndVertical();
  188. if(overdraw != _ProFlareBatch.overdrawDebug){
  189. _ProFlareBatch.overdrawDebug = overdraw;
  190. if(overdraw){
  191. temp2D = new Texture2D(1, 16);
  192. temp2D.name = "[Generated] Debug";
  193. temp2D.hideFlags = HideFlags.DontSave;
  194. for (int i = 0; i < 16; ++i)
  195. temp2D.SetPixel(0, i, Color.white);
  196. _ProFlareBatch.mat.mainTexture = temp2D;
  197. }else{
  198. if(_atlas.texture != null)
  199. _ProFlareBatch.mat.mainTexture = _atlas.texture;
  200. if(temp2D != null)
  201. Destroy(temp2D);
  202. }
  203. }
  204. FlareEditorHelper.DrawGuiDivider();
  205. if (GUI.changed||Updated)
  206. {
  207. Updated = false;
  208. EditorUtility.SetDirty (target);
  209. }
  210. }
  211. }
  212. }