//### Particles Static Bezier Flow Inspector //Provides a Unity Editor UI for `ParticlesStaticBezierFlowController` // //License information: [ASSET STORE TERMS OF SERVICE AND EULA](https://unity3d.com/legal/as_terms) // //Developed by [MathArtCode](https://www.assetstore.unity3d.com/en/#!/search/page=1/sortby=popularity/query=publisher:8738) team, 2015 using Assets.Editor.BezierCurvedParticlesFlow.Utilities; using Assets.Scripts.BezierCurvedParticlesFlow; using UnityEditor; using UnityEngine; #if !UNITY_3_5 namespace Assets.Editor.BezierCurvedParticlesFlow { #endif // ReSharper disable once UnusedMember.Global [CustomEditor( typeof( ParticlesStaticBezierFlowController ) )] public sealed class ParticlesStaticBezierFlowInspector: UnityEditor.Editor { private ParticlesStaticBezierFlowController _flowController; private CurveDrawingHelper _curveDrawingHelperObject; private CurveDrawingHelper CurveDrawingHelper { get { if ( _curveDrawingHelperObject == null ) { _curveDrawingHelperObject = new CurveDrawingHelper( this, _flowController.gameObject, _flowController.BezierLogic ); CurveDrawingHelper.OnChangeInitiated += OnChangeStarted; CurveDrawingHelper.OnChangeCommit += OnChangeCommit; } return _curveDrawingHelperObject; } } //Draws inspector interface public override void OnInspectorGUI() { _flowController = target as ParticlesStaticBezierFlowController; if ( _flowController == null ) { Debug.LogError( "Spline was not found" ); return; } EditorGUI.BeginChangeCheck(); if ( CurveDrawingHelper.SelectedIndex >= 0 && CurveDrawingHelper.SelectedIndex < _flowController.BezierLogic.ControlPointCount ) { DrawSelectedPointInspector(); } if ( GUILayout.Button( "Add Point" ) ) { OnChangeStarted("Add Point"); _flowController.BezierLogic.AddPoint(); OnChangeCommit(); } var usePositions = GUILayout.Toggle(_flowController.UsePositions, "Use Positions"); if ( usePositions != _flowController.UsePositions ) { OnChangeStarted("Use Positions changed" ); _flowController.UsePositions = usePositions; OnChangeCommit(); } var useVelocities = GUILayout.Toggle( _flowController.UseVelocities, "Use Velocities" ); if ( useVelocities != _flowController.UseVelocities ) { OnChangeStarted("Use Velocities changed" ); _flowController.UseVelocities = useVelocities; OnChangeCommit(); } var samplesCount = EditorGUILayout.IntField( "Segments count", _flowController.SamplesCount ); if ( samplesCount != _flowController.SamplesCount ) { OnChangeStarted("Segments count changed"); _flowController.SamplesCount = samplesCount; OnChangeCommit(); } #if UNITY_3_5 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); var maxParticles = EditorGUILayout.IntField( "Max Particles", _flowController.MaxParticles ); if ( maxParticles != _flowController.MaxParticles ) { OnChangeStarted( "Max Particles count changed" ); _flowController.MaxParticles = maxParticles; OnChangeCommit(); } #endif } //Draws currently selected curve point Editor Inspector UI private void DrawSelectedPointInspector() { GUILayout.Label("Selected Point"); EditorGUI.BeginChangeCheck(); var point = EditorGUILayout.Vector3Field( "Position", _flowController.BezierLogic.GetControlPoint( CurveDrawingHelper.SelectedIndex) ); if (EditorGUI.EndChangeCheck()) { OnChangeStarted("Move Point"); _flowController.BezierLogic.SetControlPoint( CurveDrawingHelper.SelectedIndex, point ); OnChangeCommit(); } EditorGUI.BeginChangeCheck(); } // Draws curve on in Scene window // ReSharper disable once UnusedMember.Local // ReSharper disable once InconsistentNaming private void OnSceneGUI() { _flowController = target as ParticlesStaticBezierFlowController; CurveDrawingHelper.OnSceneGUI(); } // Registers editor action checkpoint private void OnChangeStarted(string label) { #if UNITY_3_5 Undo.RegisterUndo( _flowController, label ); #else Undo.RecordObject( _flowController, label); #endif } // Registers commits new checkpoint private void OnChangeCommit() { _flowController.Rasterize(); EditorUtility.SetDirty(_flowController); } } #if !UNITY_3_5 } #endif