123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- //### 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
|