70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Linq; | ||
|  | using UnityEngine; | ||
|  | using UnityEngine.Timeline; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline | ||
|  | { | ||
|  |     [CustomPropertyDrawer(typeof(TimeFieldAttribute), true)] | ||
|  |     class TimeFieldDrawer : PropertyDrawer | ||
|  |     { | ||
|  |         static WindowState state | ||
|  |         { | ||
|  |             get { return TimelineWindow.instance != null ? TimelineWindow.instance.state : null; } | ||
|  |         } | ||
|  | 
 | ||
|  |         static double currentFrameRate | ||
|  |         { | ||
|  |             get { return state != null ? TimelineWindow.instance.state.referenceSequence.frameRate : 0.0; } | ||
|  |         } | ||
|  | 
 | ||
|  |         public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) | ||
|  |         { | ||
|  |             if (property.propertyType != SerializedPropertyType.Float) | ||
|  |             { | ||
|  |                 GUILayout.Label("TimeField only works on floating point types"); | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             var timeFieldAttribute = attribute as TimeFieldAttribute; | ||
|  |             if (timeFieldAttribute == null) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             var rect = EditorGUILayout.s_LastRect; | ||
|  |             EditorGUI.BeginChangeCheck(); | ||
|  | 
 | ||
|  |             if (timeFieldAttribute.useEditMode == TimeFieldAttribute.UseEditMode.ApplyEditMode) | ||
|  |                 TimeFieldWithEditMode(rect, property, label); | ||
|  |             else | ||
|  |                 TimeField(rect, property, label); | ||
|  | 
 | ||
|  |             if (EditorGUI.EndChangeCheck()) | ||
|  |             { | ||
|  |                 if (state != null) | ||
|  |                     state.Refresh(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         static void TimeField(Rect rect, SerializedProperty property, GUIContent label) | ||
|  |         { | ||
|  |             var evt1 = InputEvent.None; | ||
|  |             TimelineInspectorUtility.TimeField(rect, property, label, false, currentFrameRate, 0, float.MaxValue, ref evt1); | ||
|  |         } | ||
|  | 
 | ||
|  |         static void TimeFieldWithEditMode(Rect rect, SerializedProperty property, GUIContent label) | ||
|  |         { | ||
|  |             double minStartTime; | ||
|  |             if (property.hasMultipleDifferentValues) | ||
|  |                 minStartTime = SelectionManager.SelectedItems().Min(i => i.start); | ||
|  |             else | ||
|  |                 minStartTime = property.doubleValue; | ||
|  | 
 | ||
|  |             var evt = InputEvent.None; | ||
|  |             var newValue = TimelineInspectorUtility.TimeField( | ||
|  |                 rect, label, minStartTime, false, property.hasMultipleDifferentValues, currentFrameRate, 0.0, float.MaxValue, ref evt); | ||
|  | 
 | ||
|  |             EditMode.inputHandler.ProcessMove(evt, newValue); | ||
|  |         } | ||
|  |     } | ||
|  | } |