ProFlareInspector.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422
  1. 
  2. /// ProFlares - v1.08 - Copyright 2014-2015 All rights reserved - ProFlares.com
  3. /// <summary>
  4. /// ProFlareInspector.cs
  5. /// Custom inspector for the ProFlare
  6. /// </summary>
  7. using UnityEngine;
  8. using UnityEditor;
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. [CanEditMultipleObjects]
  12. [CustomEditor(typeof(ProFlare))]
  13. public class ProFlareInspector : Editor {
  14. ProFlare _flare;
  15. GUIStyle title;
  16. GUIStyle thinButton;
  17. GUIStyle thinButtonRed;
  18. GUIStyle dropDownButton;
  19. GUIStyle enumStyleButton;
  20. private static Texture2D visibility_On;
  21. private static Texture2D visibility_Off;
  22. bool listeningForGuiChanges;
  23. bool guiChanged = false;
  24. int selectionCount = 0;
  25. private void CheckUndo()
  26. {
  27. Event e = Event.current;
  28. if ( e.type == EventType.MouseDown && e.button == 0 || e.type == EventType.KeyUp && ( e.keyCode == KeyCode.Tab ) ) {
  29. //Debug.Log("record2");
  30. Undo.RegisterCompleteObjectUndo(target, "Undo ProFlare Change");
  31. Undo.FlushUndoRecordObjects();
  32. listeningForGuiChanges = true;
  33. guiChanged = false;
  34. }
  35. else if ( listeningForGuiChanges && guiChanged ) {
  36. //Debug.Log("record2");
  37. listeningForGuiChanges = false;
  38. Undo.RegisterCompleteObjectUndo(target, "Undo ProFlare Change");
  39. Undo.FlushUndoRecordObjects();
  40. }
  41. }
  42. public List<ProFlare> Flares = new List<ProFlare>();
  43. public override void OnInspectorGUI () {
  44. selectionCount = 0;
  45. //base.DrawDefaultInspector();
  46. Flares.Clear();
  47. foreach(GameObject go in Selection.gameObjects){
  48. ProFlare selectedFlare = go.GetComponent<ProFlare>();
  49. if(selectedFlare){
  50. Flares.Add(selectedFlare);
  51. selectionCount++;
  52. }
  53. }
  54. if(selectionCount > 1){
  55. EditorGUILayout.HelpBox("Multiple Flares selected.", MessageType.Warning,false);
  56. //EditorGUI.showMixedValue = true;
  57. }
  58. _flare = target as ProFlare;
  59. CheckUndo();
  60. //#if UNITY_4_3
  61. EditorGUI.BeginChangeCheck();
  62. //#endif
  63. FlareEditorHelper.DrawGuiDivider();
  64. bool error = false;
  65. title = FlareEditorHelper.TitleStyle();
  66. thinButton = FlareEditorHelper.ThinButtonStyle();
  67. enumStyleButton = FlareEditorHelper.EnumStyleButton();
  68. thinButtonRed = FlareEditorHelper.ThinButtonRedStyle();
  69. EditorGUILayout.LabelField("Flare Setup :",title);
  70. GUILayout.Space(10f);
  71. dropDownButton = FlareEditorHelper.DropDownButtonStyle();
  72. if(selectionCount <= 1)
  73. {
  74. EditorGUILayout.BeginHorizontal();
  75. if((!_flare.EditingAtlas)&&(_flare._Atlas != null))
  76. GUI.enabled = false;
  77. ProFlareAtlas _Atlas = EditorGUILayout.ObjectField("Flare Atlas", _flare._Atlas, typeof(ProFlareAtlas), false) as ProFlareAtlas;
  78. GUI.enabled = true;
  79. if(_flare._Atlas)
  80. if(GUILayout.Button("EDIT",GUILayout.Width(60))){
  81. _flare.EditingAtlas = _flare.EditingAtlas ? false : true;
  82. }
  83. EditorGUILayout.EndHorizontal();
  84. if((_flare.EditingAtlas)&&(_flare._Atlas != null)){
  85. EditorGUILayout.HelpBox("Changing atlas can cause data loss if elements do NOT exist in the new atlas.", MessageType.Warning,false);
  86. }
  87. GUI.enabled = true;
  88. if(_flare._Atlas != _Atlas){
  89. _flare._Atlas = _Atlas;
  90. ProFlareBatch[] flareBatchs = GameObject.FindObjectsOfType(typeof(ProFlareBatch)) as ProFlareBatch[];
  91. int matchCount = 0;
  92. foreach(ProFlareBatch flareBatch in flareBatchs){
  93. if(flareBatch._atlas == _Atlas){
  94. matchCount++;
  95. }
  96. }
  97. _flare.FlareBatches = new ProFlareBatch[matchCount];
  98. int count = 0;
  99. foreach(ProFlareBatch flareBatch in flareBatchs){
  100. if(flareBatch._atlas == _Atlas){
  101. _flare.FlareBatches[count] = flareBatch;
  102. _flare.FlareBatches[count].dirty = true;
  103. count++;
  104. }
  105. }
  106. if(count != 0){
  107. if(_flare.Elements.Count == 0){
  108. ProFlareElement element = new ProFlareElement();
  109. element.flare = _flare;
  110. element.SpriteName = _flare._Atlas.elementsList[0].name;
  111. element.flareAtlas = _flare._Atlas;
  112. element.position = -1;
  113. element.Scale = 1;
  114. _flare.Elements.Add(element);
  115. }
  116. }
  117. }
  118. bool missing = false;
  119. for(int i = 0; i < _flare.FlareBatches.Length; i++){
  120. if(_flare.FlareBatches[i] == null)
  121. missing = true;
  122. }
  123. if(missing){
  124. ProFlareBatch[] flareBatchs = GameObject.FindObjectsOfType(typeof(ProFlareBatch)) as ProFlareBatch[];
  125. int matchCount = 0;
  126. foreach(ProFlareBatch flareBatch in flareBatchs){
  127. if(flareBatch._atlas == _Atlas){
  128. matchCount++;
  129. }
  130. }
  131. _flare.FlareBatches = new ProFlareBatch[matchCount];
  132. int count = 0;
  133. foreach(ProFlareBatch flareBatch in flareBatchs){
  134. if(flareBatch._atlas == _Atlas){
  135. _flare.FlareBatches[count] = flareBatch;
  136. _flare.FlareBatches[count].dirty = true;
  137. count++;
  138. }
  139. }
  140. }
  141. EditorGUILayout.LabelField("Rendered by : ");
  142. if(_flare.FlareBatches.Length != 0)
  143. for(int i = 0; i < _flare.FlareBatches.Length; i++){
  144. EditorGUILayout.BeginHorizontal();
  145. EditorGUILayout.LabelField(" "+_flare.FlareBatches[i].gameObject.name);
  146. if(GUILayout.Button("Select",GUILayout.Width(60))){
  147. Selection.activeGameObject = _flare.FlareBatches[i].gameObject;
  148. }
  149. EditorGUILayout.EndHorizontal();
  150. }
  151. if(error){
  152. EditorGUILayout.HelpBox("Fix Errors before continuing.", MessageType.Error);
  153. }
  154. }
  155. FlareEditorHelper.DrawGuiDivider();
  156. EditorGUILayout.LabelField("Global Settings :",title);
  157. GUILayout.Space(10f);
  158. Rect r = EditorGUILayout.BeginVertical("box");
  159. {
  160. Rect r2 = r;
  161. r2.height = 20;
  162. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  163. _flare.EditGlobals = _flare.EditGlobals ? false : true;
  164. GUILayout.Label("General");
  165. if(_flare.EditGlobals){
  166. GUILayout.Space(5f);
  167. //Scale
  168. float _flareGlobalScale = EditorGUILayout.Slider("Scale",_flare.GlobalScale,0f,2000f);
  169. if(_flareGlobalScale != _flare.GlobalScale){
  170. _flare.GlobalScale = _flareGlobalScale;
  171. foreach(ProFlare flare in Flares){
  172. flare.GlobalScale = _flare.GlobalScale;
  173. }
  174. }
  175. _flare.MultiplyScaleByTransformScale = EditorGUILayout.Toggle("Multiply Scale By Transform Scale",_flare.MultiplyScaleByTransformScale);
  176. float _flareGlobalBrightness = EditorGUILayout.Slider("Brightness",_flare.GlobalBrightness,0f,1f);
  177. if(_flareGlobalBrightness != _flare.GlobalBrightness){
  178. _flare.GlobalBrightness = _flareGlobalBrightness;
  179. _flare.GlobalTintColor.a = _flare.GlobalBrightness;
  180. foreach(ProFlare flare in Flares){
  181. flare.GlobalBrightness = _flareGlobalBrightness;
  182. flare.GlobalTintColor.a = _flare.GlobalBrightness;
  183. }
  184. }
  185. Color _flareGlobalTintColor = EditorGUILayout.ColorField("Tint",_flare.GlobalTintColor);
  186. if(_flareGlobalTintColor != _flare.GlobalTintColor){
  187. _flare.GlobalTintColor = _flareGlobalTintColor;
  188. _flare.GlobalBrightness = _flare.GlobalTintColor.a;
  189. foreach(ProFlare flare in Flares){
  190. flare.GlobalTintColor = _flareGlobalTintColor;
  191. flare.GlobalBrightness = _flare.GlobalTintColor.a;
  192. }
  193. }
  194. FlareEditorHelper.DrawGuiInBoxDivider();
  195. bool currentSunState = _flare.sunMode;
  196. _flare.sunMode = EditorGUILayout.Toggle("Sun Mode",_flare.sunMode);
  197. if(_flare.sunMode && ((_flare.sunModeTransformA == null)||_flare.sunModeTransformA == null)){
  198. if(_flare.sunModeTransformA)
  199. DestroyImmediate(_flare.sunModeTransformA);
  200. if(_flare.sunModeTransformB)
  201. DestroyImmediate(_flare.sunModeTransformB);
  202. _flare.setupSunMode();
  203. }
  204. if(currentSunState &&(_flare.sunMode == false)){
  205. if(_flare.sunModeTransformA){
  206. DestroyImmediate(_flare.sunModeTransformA.gameObject);
  207. _flare.sunModeTransformA = null;
  208. }
  209. if(_flare.sunModeTransformB){
  210. DestroyImmediate(_flare.sunModeTransformB.gameObject);
  211. _flare.sunModeTransformB = null;
  212. }
  213. }
  214. FlareEditorHelper.DrawGuiInBoxDivider();
  215. //Angle Falloff Options
  216. if(selectionCount <= 1){
  217. GUILayout.BeginHorizontal();
  218. {
  219. _flare.UseAngleLimit = EditorGUILayout.Toggle("Use Angle Falloff",_flare.UseAngleLimit);
  220. GUI.enabled = _flare.UseAngleLimit;
  221. _flare.maxAngle = Mathf.Clamp(EditorGUILayout.FloatField("Max Angle",_flare.maxAngle),0,360);
  222. }
  223. GUILayout.EndHorizontal();
  224. _flare.UseAngleScale = EditorGUILayout.Toggle(" Affect Scale",_flare.UseAngleScale);
  225. _flare.UseAngleBrightness = EditorGUILayout.Toggle(" Affect Brightness",_flare.UseAngleBrightness);
  226. GUILayout.BeginHorizontal();
  227. {
  228. _flare.UseAngleCurve = EditorGUILayout.Toggle(" Use Curve",_flare.UseAngleCurve);
  229. GUI.enabled = _flare.UseAngleCurve;
  230. _flare.AngleCurve = EditorGUILayout.CurveField(_flare.AngleCurve);
  231. if(GUILayout.Button("Reset",GUILayout.MaxWidth(50))){ _flare.AngleCurve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(1, 1.0f));}
  232. GUI.enabled = true;
  233. }
  234. GUILayout.EndHorizontal();
  235. GUI.enabled = true;
  236. FlareEditorHelper.DrawGuiInBoxDivider();
  237. //Max Distance Options -
  238. GUILayout.BeginHorizontal();
  239. {
  240. _flare.useMaxDistance = EditorGUILayout.Toggle("Use Distance Falloff",_flare.useMaxDistance);
  241. GUI.enabled = _flare.useMaxDistance;
  242. _flare.GlobalMaxDistance = EditorGUILayout.FloatField(" Max Distance",_flare.GlobalMaxDistance);
  243. }
  244. GUILayout.EndHorizontal();
  245. _flare.useDistanceScale = EditorGUILayout.Toggle(" Affect Scale",_flare.useDistanceScale);
  246. _flare.useDistanceFade = EditorGUILayout.Toggle(" Affect Brightness",_flare.useDistanceFade);
  247. GUI.enabled = true;
  248. FlareEditorHelper.DrawGuiInBoxDivider();
  249. _flare.OffScreenFadeDist = EditorGUILayout.FloatField("Off Screen Fade Distance",_flare.OffScreenFadeDist);
  250. FlareEditorHelper.DrawGuiInBoxDivider();
  251. _flare.neverCull = EditorGUILayout.Toggle("Never Cull Flare",_flare.neverCull);
  252. }
  253. }
  254. }
  255. EditorGUILayout.EndVertical();
  256. if(selectionCount <= 1)
  257. {
  258. r = EditorGUILayout.BeginVertical("box");
  259. Rect r2 = r;
  260. r2.height = 20;
  261. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  262. _flare.EditDynamicTriggering = _flare.EditDynamicTriggering ? false : true;
  263. GUILayout.Label("Dynamics Triggering");
  264. if(_flare.EditDynamicTriggering){GUILayout.Space(5f);
  265. _flare.useDynamicEdgeBoost = EditorGUILayout.Toggle("Use Dynamic Edge Boost",_flare.useDynamicEdgeBoost);
  266. GUI.enabled = _flare.useDynamicEdgeBoost;
  267. _flare.DynamicEdgeBoost = EditorGUILayout.FloatField(" Dynamic Edge Scale",_flare.DynamicEdgeBoost);
  268. _flare.DynamicEdgeBrightness = EditorGUILayout.FloatField(" Dynamic Edge Brightness",_flare.DynamicEdgeBrightness);
  269. _flare.DynamicEdgeRange = EditorGUILayout.FloatField(" Dynamic Edge Range",_flare.DynamicEdgeRange);
  270. _flare.DynamicEdgeBias = EditorGUILayout.FloatField(" Dynamic Edge Bias",_flare.DynamicEdgeBias);
  271. GUILayout.BeginHorizontal();
  272. {
  273. _flare.DynamicEdgeCurve = EditorGUILayout.CurveField(" Dynamic Edge Curve", _flare.DynamicEdgeCurve);
  274. if(GUILayout.Button("Reset",GUILayout.MaxWidth(50))) _flare.DynamicEdgeCurve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1), new Keyframe(1, 0f));
  275. }
  276. GUILayout.EndHorizontal();
  277. GUI.enabled = true;
  278. FlareEditorHelper.DrawGuiInBoxDivider();
  279. _flare.useDynamicCenterBoost = EditorGUILayout.Toggle("Use Dynamic Center Boost",_flare.useDynamicCenterBoost);
  280. GUI.enabled = _flare.useDynamicCenterBoost;
  281. _flare.DynamicCenterRange = EditorGUILayout.FloatField(" Dynamic Center Range",_flare.DynamicCenterRange);
  282. _flare.DynamicCenterBoost = EditorGUILayout.FloatField(" Dynamic Center Scale",_flare.DynamicCenterBoost);
  283. _flare.DynamicCenterBrightness = EditorGUILayout.FloatField(" Dynamic Center Brightness",_flare.DynamicCenterBrightness);
  284. GUI.enabled = true;
  285. }
  286. EditorGUILayout.EndVertical();
  287. }
  288. if(selectionCount <= 1)
  289. {
  290. r = EditorGUILayout.BeginVertical("box");
  291. Rect r2 = r;
  292. r2.height = 20;
  293. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  294. _flare.EditOcclusion = _flare.EditOcclusion ? false : true;
  295. GUILayout.Label("Occlusion");
  296. if(_flare.EditOcclusion){GUILayout.Space(5f);
  297. _flare.RaycastPhysics = EditorGUILayout.Toggle("Raycast Against Physics",_flare.RaycastPhysics);
  298. GUI.enabled = _flare.RaycastPhysics;
  299. _flare.mask = LayerMaskField(_flare.mask);
  300. FlareEditorHelper.DrawGuiInBoxDivider();
  301. EditorGUILayout.LabelField("Debug Info :");
  302. EditorGUILayout.Toggle(" Flare Occluded",_flare.Occluded);
  303. EditorGUILayout.ObjectField(" Occluding GameObject", _flare.OccludingObject, typeof(GameObject), true);
  304. FlareEditorHelper.DrawGuiInBoxDivider();
  305. GUI.enabled = true;
  306. _flare.pixelBasedOcclusion = EditorGUILayout.Toggle("Pixel Based Occlusion - BETA",_flare.pixelBasedOcclusion);
  307. GUI.enabled = _flare.pixelBasedOcclusion;
  308. _flare.pixelLayerMask = LayerMaskField(_flare.pixelLayerMask);
  309. //_flare.pixelMask2 = LayerMaskField(_flare.pixelMask2);
  310. //_flare.pixelMask3 = LayerMaskField(_flare.pixelMask3);
  311. //_flare.pixelMask4 = LayerMaskField(~(1<<8));
  312. GUI.enabled = true;
  313. _flare.occlusionScaleSpeed = EditorGUILayout.FloatField(" Occlusion Scale Speed",_flare.occlusionScaleSpeed);
  314. _flare.occlusionBrightnessSpeed = EditorGUILayout.FloatField(" Occlusion Brightness Speed",_flare.occlusionBrightnessSpeed);
  315. }
  316. EditorGUILayout.EndVertical();
  317. }
  318. if(selectionCount <= 1)
  319. {
  320. r = EditorGUILayout.BeginVertical("box");
  321. Rect r2 = r;
  322. r2.height = 20;
  323. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  324. _flare.IoSetting = _flare.IoSetting ? false : true;
  325. GUILayout.Label("Import/Export");
  326. if(_flare.IoSetting){GUILayout.Space(5f);
  327. if(_flare._Atlas != null){
  328. TextAsset ta = EditorGUILayout.ObjectField("Flare JSON Import, Drag/Drop Here", null, typeof(TextAsset), false) as TextAsset;
  329. if (ta != null)
  330. {
  331. FlareJson.LoadFlareData(_flare, ta);
  332. Updated = true;
  333. }
  334. if(GUILayout.Button("Export Flare Json Data")){
  335. ProFlareExporter.ExportFlare(_flare);
  336. }
  337. }else{
  338. GUILayout.Label("Connect Flare Atlast Before Import Or Exporting Flare.");
  339. }
  340. }
  341. EditorGUILayout.EndVertical();
  342. }
  343. FlareEditorHelper.DrawGuiDivider();
  344. EditorGUILayout.LabelField("Element Settings :",title);
  345. GUILayout.Space(10f);
  346. if(selectionCount > 1){
  347. EditorGUILayout.HelpBox("Editing flare elements is not supported in while multiple flares selected.", MessageType.Warning,false);
  348. }else{
  349. if(_flare._Atlas != null)
  350. for(int i = 0; i < _flare.Elements.Count;i++)
  351. ElementEditor(_flare.Elements[i],(i+1));
  352. if(_flare._Atlas != null)
  353. if(GUILayout.Button("ADD NEW",thinButton)){
  354. ProFlareElement element = new ProFlareElement();
  355. element.flare = _flare;
  356. element.SpriteName = _flare._Atlas.elementsList[0].name;
  357. element.flareAtlas = _flare._Atlas;
  358. element.position = -1;
  359. element.Scale = 1;
  360. for(int i = 0; i < _flare.FlareBatches.Length; i++){
  361. _flare.FlareBatches[i].dirty = true;
  362. }
  363. //_flare._FlareBatch.dirty = true;
  364. _flare.Elements.Add(element);
  365. }
  366. }
  367. FlareEditorHelper.DrawGuiDivider();
  368. if (GUI.changed||Updated)
  369. {
  370. //Debug.Log("dirty:");
  371. Updated = false;
  372. guiChanged = true;
  373. EditorUtility.SetDirty (target);
  374. if(selectionCount > 1)
  375. foreach(GameObject go in Selection.gameObjects){
  376. ProFlare selectedFlare = go.GetComponent<ProFlare>();
  377. if(selectedFlare)
  378. EditorUtility.SetDirty(selectedFlare);
  379. }
  380. }
  381. if (EditorGUI.EndChangeCheck())
  382. {
  383. //Debug.Log("Change");
  384. //Undo.RegisterCompleteObjectUndo(target, "Changed Area Of Effect");
  385. //t.areaOfEffect = areaOfEffect;
  386. //Undo.FlushUndoRecordObjects();
  387. }
  388. //EditorGUI.EndChangeCheck();
  389. }
  390. public bool Updated = false;
  391. void ElementEditor(ProFlareElement element,int count){
  392. ProFlareElement.Type elementType;
  393. EditorGUILayout.BeginHorizontal();
  394. {
  395. //
  396. if(GUILayout.Button(" ",thinButton,GUILayout.MaxWidth(35))){
  397. }
  398. if(GUILayout.Button(" ",thinButton,GUILayout.MaxWidth(32)))
  399. element.Visible = element.Visible ? false : true;
  400. Rect rect2 = GUILayoutUtility.GetLastRect();
  401. int extra = 15;
  402. #if UNITY_4_3
  403. extra = 15;
  404. #endif
  405. Rect outerRect = new Rect(35+extra,rect2.yMin-4,32,32);
  406. Rect final = new Rect(0,0,1,1);
  407. if( visibility_On == null) {
  408. visibility_On = Resources.Load("visibility-On") as Texture2D;
  409. }
  410. if( visibility_Off == null) {
  411. visibility_Off = Resources.Load("visibility-Off") as Texture2D;
  412. }
  413. if(element.Visible)
  414. GUI.DrawTextureWithTexCoords(outerRect,visibility_On, final, true);
  415. else
  416. GUI.DrawTextureWithTexCoords(outerRect,visibility_Off, final, true);
  417. _flare._Atlas.UpdateElementNameList();
  418. int id = EditorGUILayout.Popup(element.elementTextureID, _flare._Atlas.elementNameList,enumStyleButton,GUILayout.MaxWidth(200));
  419. if(element.elementTextureID != id){
  420. Debug.Log("Changing Sprite " + element.flareAtlas.elementsList[id].name);
  421. element.elementTextureID = id;
  422. element.SpriteName = element.flareAtlas.elementsList[id].name;
  423. for(int f = 0; f < element.flare.FlareBatches.Length; f++){
  424. element.flare.FlareBatches[f].dirty = true;
  425. }
  426. }
  427. elementType = (ProFlareElement.Type)EditorGUILayout.EnumPopup(element.type,enumStyleButton,GUILayout.MaxWidth(100));
  428. if(GUILayout.Button("EDIT",thinButton,GUILayout.MaxWidth(80))){
  429. if(element.Editing)
  430. element.Editing = false;
  431. else{
  432. element.ElementSetting = false;
  433. element.OffsetSetting = false;
  434. element.ColorSetting = false;
  435. element.ScaleSetting = false;
  436. element.RotationSetting = false;
  437. element.OverrideSetting = false;
  438. element.Editing = true;
  439. }
  440. }
  441. if(GUILayout.Button("CLONE",thinButton)){
  442. element.Editing = false;
  443. _flare.Elements.Add(CloneElement(element));
  444. //_flare._FlareBatch.dirty = true;
  445. for(int i = 0; i < _flare.FlareBatches.Length; i++){
  446. _flare.FlareBatches[i].dirty = true;
  447. }
  448. }
  449. if(GUILayout.Button("REMOVE",thinButtonRed)){
  450. for(int i = 0; i < _flare.FlareBatches.Length; i++){
  451. _flare.FlareBatches[i].dirty = true;
  452. }
  453. // element.flare._FlareBatch.dirty = true;
  454. element.flare.Elements.Remove(element);
  455. return;
  456. }
  457. }
  458. EditorGUILayout.EndHorizontal();
  459. //Preview Texture Renderer
  460. {
  461. int extra = 15;
  462. #if UNITY_4_3
  463. extra = 15;
  464. #endif
  465. Rect rect2 = GUILayoutUtility.GetLastRect();
  466. Rect outerRect = new Rect(10+extra,rect2.yMin+1,22,22);
  467. if(_flare._Atlas)
  468. if(_flare._Atlas.texture)
  469. if((element.elementTextureID < _flare._Atlas.elementsList.Count))
  470. GUI.DrawTextureWithTexCoords(outerRect, _flare._Atlas.texture, _flare._Atlas.elementsList[element.elementTextureID].UV, false);
  471. }
  472. {
  473. if((element.colorTexture == null)||element.colorTextureDirty){
  474. if(element.useColorRange)
  475. element.colorTexture = CreateGradientTex(element,element.SubElementColor_Start,element.SubElementColor_End);
  476. else
  477. element.colorTexture = CreateGradientTex(element,element.ElementTint,element.ElementTint);
  478. }
  479. int extra = 15;
  480. #if UNITY_4_3
  481. extra = 15;
  482. #endif
  483. Rect rect2 = GUILayoutUtility.GetLastRect();
  484. Rect outerRect = new Rect(3+extra,rect2.yMin+1,6,22);
  485. Rect UV = new Rect(0,0,1,1);
  486. GUI.DrawTextureWithTexCoords(outerRect, element.colorTexture, UV, false);
  487. }
  488. if(element.type != elementType){
  489. element.type = elementType;
  490. switch(elementType){
  491. case(ProFlareElement.Type.Single):
  492. break;
  493. case(ProFlareElement.Type.Multi):
  494. if(element.subElements.Count == 0)
  495. {
  496. for(int i = 0; i < 5; i++){
  497. SubElement sub = new SubElement();
  498. sub.random = Random.Range(0f,1f);
  499. sub.random2 = Random.Range(0f,1f);
  500. sub.RandomColorSeedR = Random.Range(-1f,1f);
  501. sub.RandomColorSeedG = Random.Range(-1f,1f);
  502. sub.RandomColorSeedB = Random.Range(-1f,1f);
  503. element.subElements.Add(sub);
  504. }
  505. element.useRangeOffset = true;
  506. element.Editing = true;
  507. }
  508. break;
  509. }
  510. for(int f = 0; f < element.flare.FlareBatches.Length; f++){
  511. element.flare.FlareBatches[f].dirty = true;
  512. }
  513. }
  514. if(element.Editing ){
  515. QuickEdit(element,count);
  516. if(element.type == ProFlareElement.Type.Multi)
  517. ElementOptions(element,count);
  518. OffsetOptions(element,count);
  519. ColorOptions(element,count);
  520. ScaleOptions(element,count);
  521. RotationOptions(element,count);
  522. OverrideOptions(element,count);
  523. }
  524. }
  525. void QuickEdit(ProFlareElement element,int count){
  526. EditorGUILayout.BeginVertical("box");
  527. EditorGUILayout.BeginHorizontal();
  528. {
  529. GUILayout.Label("Quick Edit -",GUILayout.MaxWidth(80));
  530. element.Scale = EditorGUILayout.Slider(element.Scale,0f,5f,GUILayout.MaxWidth(180));
  531. GUILayout.FlexibleSpace();
  532. if(!element.useColorRange){
  533. element.ElementTint = EditorGUILayout.ColorField(element.ElementTint,GUILayout.MaxWidth(60));
  534. if(GUI.changed)
  535. element.colorTextureDirty = true;
  536. // byte TintA = (byte)EditorGUILayout.Slider(element.Tint.a,0f,1f,GUILayout.MaxWidth(180));
  537. // if(TintA != element.Tint.a){
  538. // element.Tint.a = TintA;
  539. // }
  540. float TintA = EditorGUILayout.Slider(element.ElementTint.a,0f,1f,GUILayout.MaxWidth(180));
  541. if(TintA != element.ElementTint.a){
  542. element.ElementTint.a = TintA;
  543. }
  544. }else{
  545. element.SubElementColor_Start = EditorGUILayout.ColorField(element.SubElementColor_Start,GUILayout.MaxWidth(60));
  546. element.SubElementColor_End = EditorGUILayout.ColorField(element.SubElementColor_End,GUILayout.MaxWidth(60));
  547. if(GUI.changed)
  548. element.colorTextureDirty = true;
  549. for(int i = 0; i < element.subElements.Count; i++){
  550. element.subElements[i].color = Color.Lerp(element.SubElementColor_Start,element.SubElementColor_End,element.subElements[i].random);
  551. }
  552. }
  553. }
  554. EditorGUILayout.EndHorizontal();
  555. EditorGUILayout.EndVertical();
  556. }
  557. void ElementOptions(ProFlareElement element,int count){
  558. Rect r = EditorGUILayout.BeginVertical("box");
  559. Rect r2 = r;
  560. r2.height = 20;
  561. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  562. element.ElementSetting = element.ElementSetting ? false : true;
  563. GUILayout.Label("Multi Element Options");
  564. if(!element.ElementSetting){
  565. EditorGUILayout.EndVertical();
  566. return;
  567. }
  568. GUILayout.Space(5f);
  569. if(element.type == ProFlareElement.Type.Multi){
  570. EditorGUILayout.BeginHorizontal();
  571. {
  572. EditorGUILayout.LabelField("Sub Elements Count : "+element.subElements.Count);
  573. if(GUILayout.Button("+")){
  574. SubElement sub = new SubElement();
  575. sub.random = Random.Range(0f,1f);
  576. sub.random2 = Random.Range(0f,1f);
  577. sub.RandomScaleSeed = Random.Range(-1f,1f);
  578. sub.RandomColorSeedR = Random.Range(-1f,1f);
  579. sub.RandomColorSeedG = Random.Range(-1f,1f);
  580. sub.RandomColorSeedB = Random.Range(-1f,1f);
  581. sub.RandomColorSeedA = Random.Range(-1f,1f);
  582. element.subElements.Add(sub);
  583. for(int f = 0; f < element.flare.FlareBatches.Length; f++){
  584. element.flare.FlareBatches[f].dirty = true;
  585. }
  586. }
  587. if(GUILayout.Button("-")){
  588. //SubElement sub = new SubElement();
  589. if(element.subElements.Count > 0){
  590. element.subElements.Remove(element.subElements[element.subElements.Count-1]);
  591. for(int f = 0; f < element.flare.FlareBatches.Length; f++){
  592. element.flare.FlareBatches[f].dirty = true;
  593. }
  594. }
  595. }
  596. if(GUILayout.Button("Update Random Seed")){
  597. for(int i = 0; i < element.subElements.Count; i++){
  598. Updated = true;
  599. element.subElements[i].random = Random.Range(0f,1f);
  600. element.subElements[i].random2 = Random.Range(0f,1f);
  601. element.subElements[i].RandomScaleSeed = Random.Range(-1f,1f);
  602. element.subElements[i].RandomColorSeedR = Random.Range(-1f,1f);
  603. element.subElements[i].RandomColorSeedG = Random.Range(-1f,1f);
  604. element.subElements[i].RandomColorSeedB = Random.Range(-1f,1f);
  605. element.subElements[i].RandomColorSeedA = Random.Range(-1f,1f);
  606. }
  607. }
  608. }
  609. EditorGUILayout.EndHorizontal();
  610. }
  611. EditorGUILayout.EndVertical();
  612. }
  613. void ColorOptions(ProFlareElement element,int count){
  614. Rect r = EditorGUILayout.BeginVertical("box");
  615. Rect r2 = r;
  616. r2.height = 20;
  617. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  618. element.ColorSetting = element.ColorSetting ? false : true;
  619. GUILayout.Label("Color Options");
  620. {
  621. if(element.ColorSetting){
  622. GUILayout.Space(5f);
  623. if(element.type == ProFlareElement.Type.Single){
  624. element.ElementTint = EditorGUILayout.ColorField("Tint",element.ElementTint);
  625. }else{
  626. EditorGUILayout.BeginHorizontal();
  627. {
  628. element.useColorRange = EditorGUILayout.Toggle("Use Color Tint Range",element.useColorRange);
  629. if(!element.useColorRange){
  630. element.ElementTint = EditorGUILayout.ColorField("Tint",element.ElementTint);
  631. }else{
  632. element.SubElementColor_Start = EditorGUILayout.ColorField(element.SubElementColor_Start);
  633. element.SubElementColor_End = EditorGUILayout.ColorField(element.SubElementColor_End);
  634. }
  635. }
  636. EditorGUILayout.EndHorizontal();
  637. EditorGUILayout.LabelField("Color Random");
  638. element.RandomColorAmount.x = EditorGUILayout.Slider(" R",element.RandomColorAmount.x,0f,1f);
  639. element.RandomColorAmount.y = EditorGUILayout.Slider(" G",element.RandomColorAmount.y,0f,1f);
  640. element.RandomColorAmount.z = EditorGUILayout.Slider(" B",element.RandomColorAmount.z,0f,1f);
  641. element.RandomColorAmount.w = EditorGUILayout.Slider(" Brightness",element.RandomColorAmount.w,0f,1f);
  642. }
  643. }
  644. if(element.type == ProFlareElement.Type.Single){
  645. }else{
  646. if(!element.useColorRange){
  647. for(int i = 0; i < element.subElements.Count; i++){
  648. Color col = element.ElementTint;
  649. col.r = Mathf.Clamp01( col.r+(element.RandomColorAmount.x*element.subElements[i].RandomColorSeedR));
  650. col.g = Mathf.Clamp01( col.g+(element.RandomColorAmount.y*element.subElements[i].RandomColorSeedG));
  651. col.b = Mathf.Clamp01( col.b+(element.RandomColorAmount.z*element.subElements[i].RandomColorSeedB));
  652. col.a = Mathf.Clamp01( col.a+(element.RandomColorAmount.w*element.subElements[i].RandomColorSeedA));
  653. element.subElements[i].color = col;
  654. }
  655. }else{
  656. for(int i = 0; i < element.subElements.Count; i++){
  657. Color col = Color.Lerp(element.SubElementColor_Start,element.SubElementColor_End,element.subElements[i].random);
  658. col.r = Mathf.Clamp01(col.r+(element.RandomColorAmount.x*element.subElements[i].RandomColorSeedR));
  659. col.g = Mathf.Clamp01(col.g+(element.RandomColorAmount.y*element.subElements[i].RandomColorSeedG));
  660. col.b = Mathf.Clamp01(col.b+(element.RandomColorAmount.z*element.subElements[i].RandomColorSeedB));
  661. col.a = Mathf.Clamp01(col.a+(element.RandomColorAmount.w*element.subElements[i].RandomColorSeedA));
  662. element.subElements[i].color = col;
  663. }
  664. }
  665. }
  666. }
  667. EditorGUILayout.EndVertical();
  668. }
  669. void OffsetOptions(ProFlareElement element,int count){
  670. Rect r = EditorGUILayout.BeginVertical("box");
  671. Rect r2 = r;
  672. r2.height = 20;
  673. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  674. element.OffsetSetting = element.OffsetSetting ? false : true;
  675. GUILayout.Label("Offset Options");
  676. {
  677. if(element.OffsetSetting){
  678. GUILayout.Space(5f);
  679. if(element.type == ProFlareElement.Type.Single){
  680. element.position = EditorGUILayout.Slider("OffSet",element.position,-1.5f,2.5f);
  681. }else{
  682. EditorGUILayout.BeginHorizontal();
  683. {
  684. element.useRangeOffset = EditorGUILayout.Toggle("Use offset range",element.useRangeOffset);
  685. if(element.useRangeOffset){
  686. float minTemp = element.SubElementPositionRange_Min;
  687. float maxTemp = element.SubElementPositionRange_Max;
  688. EditorGUILayout.MinMaxSlider(ref element.SubElementPositionRange_Min ,ref element.SubElementPositionRange_Max,-4.5f,4.5f);
  689. if((minTemp != element.SubElementPositionRange_Min)||(maxTemp != element.SubElementPositionRange_Max)||Updated){
  690. }
  691. for(int i = 0; i < element.subElements.Count; i++){
  692. element.subElements[i].position = Mathf.Lerp(element.SubElementPositionRange_Min,element.SubElementPositionRange_Max,element.subElements[i].random);
  693. element.subElements[i].scale = Mathf.Lerp(-100f,100f,element.subElements[i].random2);
  694. Updated = true;
  695. }
  696. EditorGUILayout.FloatField(element.SubElementPositionRange_Min,GUILayout.MaxWidth(30));
  697. EditorGUILayout.FloatField(element.SubElementPositionRange_Max,GUILayout.MaxWidth(30));
  698. }else{
  699. element.position = EditorGUILayout.Slider(element.position,-1.5f,2.5f);
  700. }
  701. }
  702. EditorGUILayout.EndHorizontal();
  703. }
  704. EditorGUILayout.LabelField("Anamorphic");
  705. float x = EditorGUILayout.Slider("Vertical ",element.Anamorphic.x,0f,1f);
  706. float y = EditorGUILayout.Slider("Horizontal ",element.Anamorphic.y,0f,1f);
  707. element.Anamorphic = new Vector2(x,y);
  708. element.OffsetPostion = EditorGUILayout.Vector2Field("Position Offset", element.OffsetPostion);
  709. }
  710. if(element.type == ProFlareElement.Type.Single){
  711. }
  712. if(element.type == ProFlareElement.Type.Multi){
  713. for(int i = 0; i < element.subElements.Count; i++){
  714. element.subElements[i].position = Mathf.Lerp(element.SubElementPositionRange_Min,element.SubElementPositionRange_Max,element.subElements[i].random);
  715. element.subElements[i].scale = Mathf.Lerp(-100f,100f,element.subElements[i].random2);
  716. }
  717. }
  718. }EditorGUILayout.EndVertical();
  719. }
  720. void ScaleOptions(ProFlareElement element,int count){
  721. Rect r = EditorGUILayout.BeginVertical("box");
  722. Rect r2 = r;
  723. r2.height = 20;
  724. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  725. element.ScaleSetting = element.ScaleSetting ? false : true;
  726. GUILayout.Label("Scale Options");
  727. {
  728. if(element.ScaleSetting){
  729. GUILayout.Space(5f);
  730. EditorGUILayout.BeginHorizontal();
  731. {
  732. EditorGUILayout.LabelField("Scale");
  733. element.Scale = EditorGUILayout.Slider(element.Scale,0f,5f);
  734. }
  735. EditorGUILayout.EndHorizontal();
  736. //EditorGUILayout.BeginHorizontal();
  737. {
  738. EditorGUILayout.LabelField("Aspect",GUILayout.MinWidth(120));
  739. element.size.x = Mathf.Max(0f, EditorGUILayout.FloatField(" X", element.size.x));
  740. element.size.y = Mathf.Max(0f, EditorGUILayout.FloatField(" Y",element.size.y));
  741. }
  742. //EditorGUILayout.EndHorizontal();
  743. if(element.type == ProFlareElement.Type.Multi){
  744. element.ScaleRandom = EditorGUILayout.Slider("Random Scale",element.ScaleRandom,0,1f);
  745. EditorGUILayout.BeginHorizontal();
  746. {
  747. element.useScaleCurve = EditorGUILayout.Toggle("Use Scale Range",element.useScaleCurve,GUILayout.MaxWidth(180));
  748. GUI.enabled = element.useScaleCurve;
  749. if(element.useScaleCurve)
  750. Updated = true;
  751. if(element.type == ProFlareElement.Type.Multi){
  752. element.ScaleCurve = EditorGUILayout.CurveField(element.ScaleCurve);
  753. }
  754. if(GUILayout.Button("Reset",GUILayout.MaxWidth(50))){
  755. element.ScaleCurve = new AnimationCurve(new Keyframe(0, 0.1f), new Keyframe(0.5f, 1.0f), new Keyframe(1.0f, 0.1f));
  756. }
  757. GUI.enabled = true;
  758. }
  759. EditorGUILayout.EndHorizontal();
  760. }
  761. }
  762. }
  763. if(element.type == ProFlareElement.Type.Multi){
  764. for(int i = 0; i < element.subElements.Count; i++){
  765. if(element.useScaleCurve)
  766. element.subElements[i].scale = (1+element.subElements[i].RandomScaleSeed*(element.ScaleRandom))*element.ScaleCurve.Evaluate(element.subElements[i].random);
  767. else
  768. element.subElements[i].scale = (1+element.subElements[i].RandomScaleSeed*(element.ScaleRandom));
  769. }
  770. }
  771. EditorGUILayout.EndVertical();
  772. }
  773. void RotationOptions(ProFlareElement element,int count){
  774. Rect r = EditorGUILayout.BeginVertical("box");
  775. Rect r2 = r;
  776. r2.height = 20;
  777. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  778. element.RotationSetting = element.RotationSetting ? false : true;
  779. GUILayout.Label("Rotation Options");
  780. {
  781. if(element.RotationSetting){
  782. GUILayout.Space(5f);
  783. element.angle = EditorGUILayout.FloatField("Angle",element.angle);
  784. if(element.type == ProFlareElement.Type.Multi){
  785. element.useStarRotation = EditorGUILayout.Toggle("Use Star Rotation",element.useStarRotation);
  786. element.useRandomAngle = EditorGUILayout.Toggle("Use Random Rotation",element.useRandomAngle);
  787. if(element.useStarRotation){
  788. for(int i = 0; i < element.subElements.Count; i++){
  789. element.subElements[i].angle = (180f/element.subElements.Count)*i;
  790. Updated = true;
  791. }
  792. }else{
  793. for(int i = 0; i < element.subElements.Count; i++){
  794. element.subElements[i].angle = 0;
  795. Updated = true;
  796. }
  797. }
  798. if(element.useRandomAngle){
  799. float minTemp = element.SubElementAngleRange_Min;
  800. float maxTemp = element.SubElementAngleRange_Max;
  801. EditorGUILayout.BeginHorizontal();
  802. {
  803. EditorGUILayout.MinMaxSlider(ref element.SubElementAngleRange_Min ,ref element.SubElementAngleRange_Max,-180f,180f);
  804. EditorGUILayout.FloatField(element.SubElementAngleRange_Min);
  805. EditorGUILayout.FloatField(element.SubElementAngleRange_Max);
  806. if((minTemp != element.SubElementAngleRange_Min)||(maxTemp != element.SubElementAngleRange_Max)||Updated){
  807. for(int i = 0; i < element.subElements.Count; i++){
  808. element.subElements[i].angle = element.subElements[i].angle+Mathf.Lerp(-element.SubElementAngleRange_Min,element.SubElementAngleRange_Max,element.subElements[i].random2);
  809. Updated = true;
  810. }
  811. }
  812. }
  813. EditorGUILayout.EndHorizontal();
  814. }
  815. }
  816. element.rotateToFlare = EditorGUILayout.Toggle("Rotate To Flare",element.rotateToFlare);
  817. element.rotationSpeed = EditorGUILayout.FloatField("Movement Based Rotation",element.rotationSpeed);
  818. element.rotationOverTime = EditorGUILayout.FloatField("Rotation Overtime Speed",element.rotationOverTime);
  819. }
  820. }
  821. EditorGUILayout.EndVertical();
  822. }
  823. void OverrideOptions(ProFlareElement element,int count){
  824. Rect r = EditorGUILayout.BeginVertical("box");
  825. Rect r2 = r;
  826. r2.height = 20;
  827. if (GUI.Button(r2, GUIContent.none,dropDownButton))
  828. element.OverrideSetting = element.OverrideSetting ? false : true;
  829. GUILayout.Label("Override Options");
  830. {
  831. if(element.OverrideSetting){
  832. GUILayout.Space(5f);
  833. GUI.enabled = element.flare.useDynamicEdgeBoost;
  834. EditorGUILayout.BeginHorizontal();
  835. {
  836. element.OverrideDynamicEdgeBoost = EditorGUILayout.Toggle("Dynamic Edge Scale",element.OverrideDynamicEdgeBoost);
  837. GUILayout.FlexibleSpace();
  838. if(element.OverrideDynamicEdgeBoost)
  839. element.DynamicEdgeBoostOverride = EditorGUILayout.FloatField(" ",element.DynamicEdgeBoostOverride);
  840. }
  841. EditorGUILayout.EndHorizontal();
  842. EditorGUILayout.BeginHorizontal();{
  843. element.OverrideDynamicEdgeBrightness = EditorGUILayout.Toggle("Dynamic Edge Brightness",element.OverrideDynamicEdgeBrightness);
  844. if(element.OverrideDynamicEdgeBrightness)
  845. element.DynamicEdgeBrightnessOverride = EditorGUILayout.FloatField(" ",element.DynamicEdgeBrightnessOverride);
  846. }
  847. EditorGUILayout.EndHorizontal();
  848. GUI.enabled = true;
  849. GUI.enabled = element.flare.useDynamicCenterBoost;
  850. EditorGUILayout.BeginHorizontal();
  851. {
  852. element.OverrideDynamicCenterBoost = EditorGUILayout.Toggle("Dynamic Center Scale",element.OverrideDynamicCenterBoost);
  853. if(element.OverrideDynamicCenterBoost)
  854. element.DynamicCenterBoostOverride = EditorGUILayout.FloatField(" ",element.DynamicCenterBoostOverride);
  855. }
  856. EditorGUILayout.EndHorizontal();
  857. EditorGUILayout.BeginHorizontal();
  858. {
  859. element.OverrideDynamicCenterBrightness = EditorGUILayout.Toggle("Dynamic Center Brightness",element.OverrideDynamicCenterBrightness);
  860. if(element.OverrideDynamicCenterBrightness)
  861. element.DynamicCenterBrightnessOverride = EditorGUILayout.FloatField(" ",element.DynamicCenterBrightnessOverride);
  862. }
  863. EditorGUILayout.EndHorizontal();
  864. GUI.enabled = true;
  865. }
  866. }
  867. EditorGUILayout.EndVertical();
  868. }
  869. Texture2D CreateGradientTex (ProFlareElement element, Color c0, Color c1)
  870. {
  871. if(element.colorTexture != null){
  872. DestroyImmediate(element.colorTexture);
  873. element.colorTexture = null;
  874. }
  875. element.colorTexture = new Texture2D(1, 16);
  876. element.colorTexture.name = "[ProFlare] Gradient Texture";
  877. element.colorTexture.hideFlags = HideFlags.DontSave;
  878. for (int i = 0; i < 16; ++i)
  879. {
  880. float f = i*(1f/16f);
  881. element.colorTexture.SetPixel(0, i, Color.Lerp(c0, c1, f));
  882. }
  883. element.colorTexture.Apply();
  884. element.colorTexture.filterMode = FilterMode.Bilinear;
  885. return element.colorTexture;
  886. }
  887. public int LayerMaskField (LayerMask selected) {
  888. ArrayList layers = new ArrayList ();
  889. ArrayList layerNumbers = new ArrayList ();
  890. string name = "";
  891. for (int i=0;i<32;i++) {
  892. string layerName = LayerMask.LayerToName (i);
  893. if (layerName != "") {
  894. if (selected == (selected | (1 << i))) {
  895. layers.Add ("✓ "+layerName);
  896. name += layerName+", ";
  897. } else {
  898. layers.Add (" "+layerName);
  899. }
  900. layerNumbers.Add (i);
  901. }
  902. }
  903. bool preChange = GUI.changed;
  904. GUI.changed = false;
  905. int[] LayerNumbers = layerNumbers.ToArray (typeof(int)) as int[];
  906. int newSelected = EditorGUILayout.Popup ("Layer Mask",-1,layers.ToArray(typeof(string)) as string[],EditorStyles.layerMaskField);
  907. if (GUI.changed) {
  908. if (selected == (selected | (1 << LayerNumbers[newSelected]))) {
  909. selected &= ~(1 << LayerNumbers[newSelected]);
  910. Debug.Log ("Set Layer "+LayerMask.LayerToName (LayerNumbers[newSelected]) + " To False "+selected.value);
  911. } else {
  912. Debug.Log ("Set Layer "+LayerMask.LayerToName (LayerNumbers[newSelected]) + " To True "+selected.value);
  913. selected = selected | (1 << LayerNumbers[newSelected]);
  914. }
  915. } else {
  916. GUI.changed = preChange;
  917. }
  918. return selected;
  919. }
  920. ProFlareElement CloneElement(ProFlareElement element){
  921. ProFlareElement _element = new ProFlareElement();
  922. _element.Editing = true;
  923. _element.Visible = element.Visible;
  924. _element.elementTextureID = element.elementTextureID;
  925. _element.SpriteName = element.SpriteName;
  926. _element.flare = element.flare;
  927. _element.flareAtlas = element.flareAtlas;
  928. _element.Brightness = element.Brightness;
  929. _element.Scale = element.Scale;
  930. _element.ScaleRandom = element.ScaleRandom;
  931. _element.ScaleFinal = element.ScaleFinal;
  932. _element.RandomColorAmount = element.RandomColorAmount;
  933. //Element OffSet Properties
  934. _element.position = element.position;
  935. _element.useRangeOffset = element.useRangeOffset;
  936. _element.SubElementPositionRange_Min = element.SubElementPositionRange_Min;
  937. _element.SubElementPositionRange_Max = element.SubElementPositionRange_Max;
  938. _element.SubElementAngleRange_Min = element.SubElementAngleRange_Min;
  939. _element.SubElementAngleRange_Max = element.SubElementAngleRange_Max;
  940. _element.OffsetPosition = element.OffsetPosition;
  941. _element.Anamorphic = element.Anamorphic;
  942. _element.OffsetPostion = element.OffsetPostion;
  943. _element.angle = element.angle;
  944. _element.FinalAngle = element.FinalAngle;
  945. _element.useRandomAngle = element.useRandomAngle;
  946. _element.useStarRotation = element.useStarRotation;
  947. _element.AngleRandom_Min = element.AngleRandom_Min;
  948. _element.AngleRandom_Max = element.AngleRandom_Max;
  949. _element.OrientToSource = element.OrientToSource;
  950. _element.rotateToFlare = element.rotateToFlare;
  951. _element.rotationSpeed = element.rotationSpeed;
  952. _element.rotationOverTime = element.rotationOverTime;
  953. _element.useColorRange = element.useColorRange;
  954. _element.ElementFinalColor = element.ElementFinalColor;
  955. _element.ElementTint = element.ElementTint;
  956. _element.SubElementColor_Start = element.SubElementColor_Start;
  957. _element.SubElementColor_End = element.SubElementColor_End;
  958. _element.useScaleCurve = element.useScaleCurve;
  959. _element.ScaleCurve = new AnimationCurve(element.ScaleCurve.keys);
  960. _element.OverrideDynamicEdgeBoost = element.OverrideDynamicEdgeBoost;
  961. _element.DynamicEdgeBoostOverride = element.DynamicEdgeBoostOverride;
  962. _element.OverrideDynamicCenterBoost = element.OverrideDynamicCenterBoost;
  963. _element.DynamicCenterBoostOverride = element.DynamicCenterBoostOverride;
  964. _element.OverrideDynamicEdgeBrightness = element.OverrideDynamicEdgeBrightness;
  965. _element.DynamicEdgeBrightnessOverride = element.DynamicEdgeBrightnessOverride;
  966. _element.OverrideDynamicCenterBrightness = element.OverrideDynamicCenterBrightness;
  967. _element.DynamicCenterBrightnessOverride = element.DynamicCenterBrightnessOverride;
  968. _element.size = element.size;
  969. for(int i = 0; i < element.subElements.Count; i++){
  970. SubElement Sub = new SubElement();
  971. Sub.color = element.subElements[i].color;
  972. Sub.position = element.subElements[i].position;
  973. Sub.offset = element.subElements[i].offset;
  974. Sub.angle = element.subElements[i].angle;
  975. Sub.scale = element.subElements[i].scale;
  976. Sub.random = element.subElements[i].random;
  977. Sub.random2= element.subElements[i].random2;
  978. Sub.RandomScaleSeed = element.subElements[i].RandomScaleSeed;
  979. Sub.RandomColorSeedR = element.subElements[i].RandomColorSeedR;
  980. Sub.RandomColorSeedG = element.subElements[i].RandomColorSeedG;
  981. Sub.RandomColorSeedB = element.subElements[i].RandomColorSeedB;
  982. Sub.RandomColorSeedA = element.subElements[i].RandomColorSeedA;
  983. _element.subElements.Add(Sub);
  984. }
  985. _element.type = element.type;
  986. return _element;
  987. }
  988. void OnSceneGUI () {
  989. _flare = target as ProFlare;
  990. if(!_flare.UseAngleLimit)
  991. return;
  992. Handles.color = new Color(1f,1f,1f,0.2f);
  993. Handles.DrawSolidArc(_flare.transform.position,
  994. _flare.transform.up,
  995. _flare.transform.forward,
  996. _flare.maxAngle/2,
  997. 5);
  998. Handles.DrawSolidArc(_flare.transform.position,
  999. _flare.transform.up,
  1000. _flare.transform.forward,
  1001. -_flare.maxAngle/2,
  1002. 5);
  1003. Handles.color = Color.white;
  1004. Handles.ScaleValueHandle(_flare.maxAngle,
  1005. _flare.transform.position + _flare.transform.forward*5,
  1006. _flare.transform.rotation,
  1007. 1,
  1008. Handles.ConeHandleCap,
  1009. 2);
  1010. }
  1011. }