public override void OnInspectorGUI() { GUILayout.Label("Advanced Gesture States", EditorStyles.boldLabel); // do not draw the control variables AdvancedGesture advTarget = (AdvancedGesture)target; advTarget.gestureCooldown = EditorGUILayout.FloatField("Cooldown (seconds)", advTarget.gestureCooldown); advTarget.allowedWhileHoldingObjects = EditorGUILayout.Toggle("Allow While Holding", advTarget.allowedWhileHoldingObjects); foreach (AdvancedGestureState advState in advTarget.advancedGestureStateList) { DrawAdvancedGestureState(advState); } if (GUILayout.Button("Add Gesture State")) { advTarget.advancedGestureStateList.Add(new AdvancedGestureState()); } if (stateToDelete != null) { advTarget.advancedGestureStateList.Remove(stateToDelete); stateToDelete = null; } // set dirty to ensure the object is saved EditorUtility.SetDirty(target); }
/// <summary> /// Draws the inspector for a single AdvancedGestureState /// </summary> protected void DrawAdvancedGestureState(AdvancedGestureState advState) { GUILayout.BeginHorizontal(); advState.gestureName = GUILayout.TextField(advState.gestureName); if (GUILayout.Button("Remove Gesture State")) { stateToDelete = advState; } GUILayout.EndHorizontal(); advState.coreGesture = (Gesture)EditorGUILayout.ObjectField("Core Gesture", advState.coreGesture, typeof(Gesture), false); advState.holdTime = EditorGUILayout.Slider("Gesture Hold Time", advState.holdTime, 0.0f, 5.0f); foreach (AdvancedGestureCondition condition in advState.AdvancedGestureConditionList) { DrawAdvancedGestureCondition(condition); } GUILayout.BeginHorizontal(); advState.editorNewConditionType = (AdvancedGestureState.AdvancedConditionType)EditorGUILayout.EnumPopup(advState.editorNewConditionType, GUILayout.Width(ENUM_WIDTH)); if (GUILayout.Button("Add")) { switch (advState.editorNewConditionType) { case AdvancedGestureState.AdvancedConditionType.Hold: { advState.holdConditionList.Add(new HoldGestureCondition()); break; } case AdvancedGestureState.AdvancedConditionType.Movement: { advState.movementConditionList.Add(new MovementGestureCondition()); break; } case AdvancedGestureState.AdvancedConditionType.PalmAngle: { advState.palmConditions.Add(new PalmNormalCondition()); break; } case AdvancedGestureState.AdvancedConditionType.SimultaneousAction: { advState.simultaneousGestureConditionList.Add(new SimultaneousGesture()); break; } } } GUILayout.EndHorizontal(); if (conditionToDelete != null) { if (conditionToDelete is HoldGestureCondition) { advState.holdConditionList.Remove((HoldGestureCondition)conditionToDelete); } else if (conditionToDelete is MovementGestureCondition) { advState.movementConditionList.Remove((MovementGestureCondition)conditionToDelete); } else if (conditionToDelete is PalmNormalCondition) { advState.palmConditions.Remove((PalmNormalCondition)conditionToDelete); } else if (conditionToDelete is SimultaneousGesture) { advState.simultaneousGestureConditionList.Remove((SimultaneousGesture)conditionToDelete); } conditionToDelete = null; } }