123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using System;
- using UnityEngine;
- using UnityEditor;
- namespace HQFPSWeapons
- {
- [CustomPropertyDrawer(typeof(EquipmentMotionState))]
- public class EquipmentMotionDrawer : PropertyDrawer
- {
- public static event Action<EquipmentMotionDrawer> EnabledVisualization;
- private bool m_Enabled;
- private bool m_Visualize;
- private float m_VisualizationSpeed = 3f;
- private EquipmentPhysics m_MoverComponent;
- private EquipmentPhysics.StateType m_StateType;
-
- public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
- {
- if(property.isExpanded)
- GUI.Box(new Rect(position.x, position.y + 16f, position.width, position.height - 16f), "");
- if(!m_Enabled)
- OnEnable(property);
- EditorGUI.PropertyField(position, property, true);
- if(property.isExpanded)
- {
- if(Application.isPlaying)
- {
- // Visualize button
- position.x += 8f;
- position.y = position.yMax - 38f;
- position.height = 16f;
- position.width -= 16f;
- USEditorUtility.DoHorizontalLine(new Rect(position.x, position.y - 4f, position.width, 1f));
- GUI.color = m_Visualize ? Color.grey : Color.white;
- if(GUI.Button(position, "Visualize"))
- {
- if(m_MoverComponent != null && m_MoverComponent.enabled && m_MoverComponent.gameObject.activeInHierarchy)
- {
- m_Visualize = !m_Visualize;
- if(m_Visualize)
- EnabledVisualization(this);
- EquipmentPhysics.StateType stateToVisualize = EquipmentPhysics.StateType.None;
- if(m_Visualize)
- stateToVisualize = m_StateType;
- m_MoverComponent.VisualizeState(stateToVisualize, m_VisualizationSpeed);
- }
- }
- GUI.color = Color.white;
- // Visualize speed
- position.y = position.yMax + 2f;
- m_VisualizationSpeed = EditorGUI.Slider(position, "Speed", m_VisualizationSpeed, 0f, 20f);
- }
-
- if(GUI.changed && m_Visualize && m_MoverComponent != null)
- m_MoverComponent.VisualizeState(m_StateType, m_VisualizationSpeed);
- }
- }
-
- public override float GetPropertyHeight (SerializedProperty property, GUIContent label)
- {
- return EditorGUI.GetPropertyHeight(property) + ((Application.isPlaying && property.isExpanded) ? 44f : 0f);
- }
- private void OnEnable(SerializedProperty property)
- {
- EnabledVisualization += On_EnabledVisualization;
- Selection.selectionChanged += On_SelectionChanged;
- m_MoverComponent = property.serializedObject.targetObject as EquipmentPhysics;
- if(property.name == "IdleState")
- m_StateType = EquipmentPhysics.StateType.Idle;
- else if(property.name == "WalkState")
- m_StateType = EquipmentPhysics.StateType.Walk;
- else if(property.name == "RunState")
- m_StateType = EquipmentPhysics.StateType.Run;
- else if(property.name == "AimState")
- m_StateType = EquipmentPhysics.StateType.Aim;
- else if (property.name == "CrouchState")
- m_StateType = EquipmentPhysics.StateType.Crouch;
- else if(property.name == "OnLadderState")
- m_StateType = EquipmentPhysics.StateType.OnLadder;
- else if(property.name == "TooCloseState")
- m_StateType = EquipmentPhysics.StateType.Retraction;
- m_Enabled = true;
- }
- private void On_EnabledVisualization(EquipmentMotionDrawer drawer)
- {
- m_Visualize = (drawer == this);
- }
- private void On_SelectionChanged()
- {
- if(m_MoverComponent == null || Selection.activeGameObject == null || Selection.activeGameObject != m_MoverComponent.gameObject)
- OnDestroy();
- }
- private void OnDestroy()
- {
- EnabledVisualization -= On_EnabledVisualization;
- Selection.selectionChanged -= On_SelectionChanged;
- if(m_MoverComponent != null)
- m_MoverComponent.VisualizeState(EquipmentPhysics.StateType.None);
- }
- }
- }
|