public void Show(TransitionConnectionUI connection) { UnbindConnectionCallbacks(_connection); _connection = connection; _selectedTransition = _connection.Transitions[0]; BindTransitionFields(_selectedTransition); BindConnectionCallbacks(_connection); _transitions.itemsSource = _connection.Transitions; _transitions.selectedIndex = 0; _transitions.Refresh(); style.display = DisplayStyle.Flex; }
public TransitionInspector() { text = "Transition"; _scrollView = new ScrollView(ScrollViewMode.Vertical); _scrollView.AddToClassList("content"); Add(_scrollView); Foldout transitionsFoldout = new Foldout() { value = true, text = "Transitions" }; transitionsFoldout.RegisterValueChangedCallback(e => e.StopPropagation()); _scrollView.Add(transitionsFoldout); _transitions = new ResizableListView(); _transitions.name = "Transitions"; _transitions.itemHeight = 20; _transitions.makeItem = () => { VisualElement container = new VisualElement(); Label label = new Label() { pickingMode = PickingMode.Ignore }; Button removeButton = new Button() { text = "X" }; container.Add(label); container.Add(removeButton); return(container); }; _transitions.bindItem = (item, index) => { void Remove() { _connection.RemoveTransition(index); } item.Q <Label>().text = $"{((IStateNode)_connection.Source).Name} >>> {((StateNodeUI)_connection.Destination).Name}"; Button removeButton = item.Q <Button>(); removeButton.clicked -= Remove; removeButton.clicked += Remove; }; _transitions.onSelectionChange += selection => { _selectedTransition = (TransitionInfo)selection.First(); BindTransitionFields(_selectedTransition); }; _transitions.selectionType = SelectionType.Single; _transitions.reorderable = true; transitionsFoldout.Add(_transitions); DurationTypeField = new EnumField("Duration Type", DurationType.Fixed); DurationTypeField.RegisterValueChangedCallback(e => { _selectedTransition.DurationType = (DurationType)e.newValue; DurationField.label = (DurationType)e.newValue == DurationType.Fixed ? "Duration (s)" : "Duration (%)"; }); _scrollView.Add(DurationTypeField); DurationField = new FloatField("Duration (s)"); DurationField.RegisterValueChangedCallback(e => _selectedTransition.Duration = e.newValue); _scrollView.Add(DurationField); OffsetTypeField = new EnumField("Offset Type", DurationType.Fixed); OffsetTypeField.RegisterValueChangedCallback(e => { _selectedTransition.OffsetType = (DurationType)e.newValue; OffsetField.label = (DurationType)e.newValue == DurationType.Fixed ? "Offset (s)" : "Offset (%)"; }); _scrollView.Add(OffsetTypeField); OffsetField = new FloatField("Offset (s)"); OffsetField.RegisterValueChangedCallback(e => _selectedTransition.Offset = e.newValue); _scrollView.Add(OffsetField); InterruptionSourceField = new EnumField("Interruption Source", TransitionInterruptionSource.None); InterruptionSourceField.RegisterValueChangedCallback(e => { TransitionInterruptionSource interruptionSource = (TransitionInterruptionSource)e.newValue; _selectedTransition.InterruptionSource = interruptionSource; if (interruptionSource == TransitionInterruptionSource.None || interruptionSource == TransitionInterruptionSource.NextState) { OrderedInterruptionToggle.style.display = DisplayStyle.None; } else { OrderedInterruptionToggle.style.display = DisplayStyle.Flex; } }); _scrollView.Add(InterruptionSourceField); OrderedInterruptionToggle = new Toggle("Ordered Interruption"); OrderedInterruptionToggle.RegisterValueChangedCallback(e => { _selectedTransition.OrderedInterruption = e.newValue; e.StopPropagation(); }); OrderedInterruptionToggle.style.display = DisplayStyle.None; _scrollView.Add(OrderedInterruptionToggle); InterruptableByAnyStateToggle = new Toggle("Interruptable By Any State"); InterruptableByAnyStateToggle.RegisterValueChangedCallback(e => { _selectedTransition.InterruptableByAnyState = e.newValue; e.StopPropagation(); }); _scrollView.Add(InterruptableByAnyStateToggle); PlayAfterTransitionToggle = new Toggle("Play After Transition"); PlayAfterTransitionToggle.RegisterValueChangedCallback(e => { _selectedTransition.PlayAfterTransition = e.newValue; e.StopPropagation(); }); _scrollView.Add(PlayAfterTransitionToggle); Foldout conditionsFoldout = new Foldout() { value = true, text = "Conditions" }; conditionsFoldout.RegisterValueChangedCallback(e => e.StopPropagation()); _scrollView.Add(conditionsFoldout); VisualElement conditionListButtons = new VisualElement(); conditionListButtons.style.flexDirection = FlexDirection.Row; conditionsFoldout.Add(conditionListButtons); Button removeConditionButton = new Button(() => { if (_conditions.selectedItem == null) { return; } int firstIndex = _conditions.selectedIndex; int indexFixer = 0; foreach (var index in _conditions.selectedIndices) { _selectedTransition.Conditions.RemoveAt(index - indexFixer); indexFixer++; } _conditions.Refresh(); _conditions.selectedIndex = Mathf.Min(firstIndex, _selectedTransition.Conditions.Count - 1); }) { text = "Remove Condition" }; conditionListButtons.Add(removeConditionButton); Button addConditionButton = new Button(() => { _selectedTransition.Conditions.Add(new TransitionInfoCondition()); _conditions.Refresh(); }) { text = "Add Condition" }; conditionListButtons.Add(addConditionButton); _conditions = new ResizableListView(); _conditions.name = "Conditions"; _conditions.itemHeight = 25; _conditions.makeItem = () => { TransitionConditionUI transitionCondition = new TransitionConditionUI(); return(transitionCondition); }; _conditions.bindItem = (item, index) => { ((TransitionConditionUI)item).Bind(_selectedTransition.Conditions[index]); }; _conditions.selectionType = SelectionType.Multiple; _conditions.reorderable = true; conditionsFoldout.Add(_conditions); RegisterCallback <ChangeEvent <bool> >(e => ToggleInClassList("expanded")); }