ParticlesStaticBezierFlowInspector.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //### Particles Static Bezier Flow Inspector
  2. //Provides a Unity Editor UI for `ParticlesStaticBezierFlowController`
  3. //
  4. //License information: [ASSET STORE TERMS OF SERVICE AND EULA](https://unity3d.com/legal/as_terms)
  5. //
  6. //Developed by [MathArtCode](https://www.assetstore.unity3d.com/en/#!/search/page=1/sortby=popularity/query=publisher:8738) team, 2015
  7. using Assets.Editor.BezierCurvedParticlesFlow.Utilities;
  8. using Assets.Scripts.BezierCurvedParticlesFlow;
  9. using UnityEditor;
  10. using UnityEngine;
  11. #if !UNITY_3_5
  12. namespace Assets.Editor.BezierCurvedParticlesFlow {
  13. #endif
  14. // ReSharper disable once UnusedMember.Global
  15. [CustomEditor( typeof( ParticlesStaticBezierFlowController ) )]
  16. public sealed class ParticlesStaticBezierFlowInspector: UnityEditor.Editor {
  17. private ParticlesStaticBezierFlowController _flowController;
  18. private CurveDrawingHelper _curveDrawingHelperObject;
  19. private CurveDrawingHelper CurveDrawingHelper {
  20. get {
  21. if ( _curveDrawingHelperObject == null ) {
  22. _curveDrawingHelperObject =
  23. new CurveDrawingHelper( this, _flowController.gameObject, _flowController.BezierLogic );
  24. CurveDrawingHelper.OnChangeInitiated += OnChangeStarted;
  25. CurveDrawingHelper.OnChangeCommit += OnChangeCommit;
  26. }
  27. return _curveDrawingHelperObject;
  28. }
  29. }
  30. //Draws inspector interface
  31. public override void OnInspectorGUI() {
  32. _flowController = target as ParticlesStaticBezierFlowController;
  33. if ( _flowController == null ) {
  34. Debug.LogError( "Spline was not found" );
  35. return;
  36. }
  37. EditorGUI.BeginChangeCheck();
  38. if ( CurveDrawingHelper.SelectedIndex >= 0 && CurveDrawingHelper.SelectedIndex < _flowController.BezierLogic.ControlPointCount ) {
  39. DrawSelectedPointInspector();
  40. }
  41. if ( GUILayout.Button( "Add Point" ) ) {
  42. OnChangeStarted("Add Point");
  43. _flowController.BezierLogic.AddPoint();
  44. OnChangeCommit();
  45. }
  46. var usePositions = GUILayout.Toggle(_flowController.UsePositions, "Use Positions");
  47. if ( usePositions != _flowController.UsePositions ) {
  48. OnChangeStarted("Use Positions changed" );
  49. _flowController.UsePositions = usePositions;
  50. OnChangeCommit();
  51. }
  52. var useVelocities = GUILayout.Toggle( _flowController.UseVelocities, "Use Velocities" );
  53. if ( useVelocities != _flowController.UseVelocities ) {
  54. OnChangeStarted("Use Velocities changed" );
  55. _flowController.UseVelocities = useVelocities;
  56. OnChangeCommit();
  57. }
  58. var samplesCount = EditorGUILayout.IntField( "Segments count", _flowController.SamplesCount );
  59. if ( samplesCount != _flowController.SamplesCount ) {
  60. OnChangeStarted("Segments count changed");
  61. _flowController.SamplesCount = samplesCount;
  62. OnChangeCommit();
  63. }
  64. #if UNITY_3_5
  65. EditorGUILayout.HelpBox("You shall set this to the same value \"Particle System->Game Object->Max Particles\" is set. \nThis field is editable only for Unity 3.", MessageType.Warning);
  66. var maxParticles = EditorGUILayout.IntField( "Max Particles", _flowController.MaxParticles );
  67. if ( maxParticles != _flowController.MaxParticles ) {
  68. OnChangeStarted( "Max Particles count changed" );
  69. _flowController.MaxParticles = maxParticles;
  70. OnChangeCommit();
  71. }
  72. #endif
  73. }
  74. //Draws currently selected curve point Editor Inspector UI
  75. private void DrawSelectedPointInspector() {
  76. GUILayout.Label("Selected Point");
  77. EditorGUI.BeginChangeCheck();
  78. var point = EditorGUILayout.Vector3Field( "Position", _flowController.BezierLogic.GetControlPoint( CurveDrawingHelper.SelectedIndex) );
  79. if (EditorGUI.EndChangeCheck()) {
  80. OnChangeStarted("Move Point");
  81. _flowController.BezierLogic.SetControlPoint( CurveDrawingHelper.SelectedIndex, point );
  82. OnChangeCommit();
  83. }
  84. EditorGUI.BeginChangeCheck();
  85. }
  86. // Draws curve on in Scene window
  87. // ReSharper disable once UnusedMember.Local
  88. // ReSharper disable once InconsistentNaming
  89. private void OnSceneGUI() {
  90. _flowController = target as ParticlesStaticBezierFlowController;
  91. CurveDrawingHelper.OnSceneGUI();
  92. }
  93. // Registers editor action checkpoint
  94. private void OnChangeStarted(string label) {
  95. #if UNITY_3_5
  96. Undo.RegisterUndo( _flowController, label );
  97. #else
  98. Undo.RecordObject( _flowController, label);
  99. #endif
  100. }
  101. // Registers commits new checkpoint
  102. private void OnChangeCommit() {
  103. _flowController.Rasterize();
  104. EditorUtility.SetDirty(_flowController);
  105. }
  106. }
  107. #if !UNITY_3_5
  108. }
  109. #endif