/// <summary> /// Draws the inspector for an advanced gesture condition /// </summary> protected void DrawAdvancedGestureCondition(AdvancedGestureCondition condition) { GUILayout.BeginHorizontal(); string header = condition.GetType().Name; GUILayout.Label(header, EditorStyles.boldLabel); if (GUILayout.Button("Remove")) { conditionToDelete = condition; } GUILayout.EndHorizontal(); if (condition is MovementGestureCondition) { MovementGestureCondition mvtCondition = (MovementGestureCondition)condition; GUILayout.BeginHorizontal(); mvtCondition.distanceFromPreviousGesture = EditorGUILayout.Slider("Distance from last gesture", mvtCondition.distanceFromPreviousGesture, 0.0f, 1.5f); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); mvtCondition.distanceOperator = (MovementGestureCondition.MovementOperator)EditorGUILayout.EnumPopup("Comparison Operator", mvtCondition.distanceOperator); if (mvtCondition.distanceOperator == MovementGestureCondition.MovementOperator.EqualTo) { mvtCondition.distanceTolerance = EditorGUILayout.Slider("Tolerance", mvtCondition.distanceTolerance, 0.0f, 0.2f); } GUILayout.EndHorizontal(); } else if (condition is HoldGestureCondition) { HoldGestureCondition holdCondition = (HoldGestureCondition)condition; holdCondition.gestureHoldTime = EditorGUILayout.FloatField("Hold Time", holdCondition.gestureHoldTime); } else if (condition is PalmNormalCondition) { PalmNormalCondition palmCondition = (PalmNormalCondition)condition; GUILayout.BeginHorizontal(); palmCondition.otherVectorToUse = (PalmNormalCondition.OtherVector)EditorGUILayout.EnumPopup("Other Vector", palmCondition.otherVectorToUse); palmCondition.otherVectorDirection = (PalmNormalCondition.VectorType)EditorGUILayout.EnumPopup("Other Vector Direction", palmCondition.otherVectorDirection); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); palmCondition.eulerRotationFromOtherVector = EditorGUILayout.Vector3Field("Rotation of Other", palmCondition.eulerRotationFromOtherVector); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); palmCondition.tolerance = EditorGUILayout.Slider("Tolerance", palmCondition.tolerance, 0.0f, 1.0f); GUILayout.EndHorizontal(); } else if (condition is SimultaneousGesture) { SimultaneousGesture simulCondition = (SimultaneousGesture)condition; simulCondition.simultaneousGesture = (Gesture)EditorGUILayout.ObjectField("Other Gesture", simulCondition.simultaneousGesture, typeof(Gesture), false); } }
/// <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; } }