private void ExtractPopupArrays(AnimatorStateBinderBehaviour stateBinder) { // Generate the list of broadcaster states var broadcasterStates = stateBinder.Broadcaster.Animator.GetStateReferences(); broadcasterStates = broadcasterStates.OrderBy(state => state.Name).ToList(); var broadcasterStateNames = broadcasterStates.Select(x => x.Name).ToList(); broadcasterStates.Insert(0, null); broadcasterStateNames.Insert(0, Unassigned); // Unity only acceps arrays for GUI, so convert the lists to arrays _broadcasterStates = broadcasterStates.ToArray(); _broadcasterStateNames = broadcasterStateNames.ToArray(); // Generate the list of receiver parameters var receiverParameters = stateBinder.Receiver.Animator.GetSerializableParameters(); var receiverParameterNames = receiverParameters.Select(x => x.Name).ToList(); receiverParameters.Insert(0, null); receiverParameterNames.Insert(0, Unassigned); // Unity only acceps arrays for GUI, so convert the lists to arrays _receiverParameters = receiverParameters.ToArray(); _receiverParameterNames = receiverParameterNames.ToArray(); }
public override void OnInspectorGUI() { _stateBinder = (AnimatorStateBinderBehaviour)target; SetupForContextMenus(); _defaultBackgroundColor = GUI.backgroundColor; var broadcasterProperty = serializedObject.FindProperty("_broadcaster"); EditorGUILayout.PropertyField(broadcasterProperty); if (_stateBinder.Broadcaster != null) { GUILayout.Label("Bound States", EditorStyles.boldLabel); ExtractPopupArrays(_stateBinder); SelectFilterType(); SelectFilterIndex(); if (_stateBinder.StateBindings.Count > 0) { int numBindingsDrawn = 0; for (int i = 0; i < _stateBinder.StateBindings.Count; i++) { int stateIndex = GetStateIndex(_stateBinder.StateBindings[i].StateEntered); int parameterIndex = GetParamIndex(_stateBinder.StateBindings[i].Parameter); if (IncludedInFilter(_stateBinder.StateBindings[i], stateIndex, parameterIndex)) { // Alternate the background color each state element float alphaMod = Mathf.Min((numBindingsDrawn + 1) % 2, 0.5f); GUI.backgroundColor = new Color(_defaultBackgroundColor.r, _defaultBackgroundColor.g, _defaultBackgroundColor.b, _defaultBackgroundColor.a * alphaMod); DrawStateBinding(_stateBinder.StateBindings[i], stateIndex, parameterIndex); // Track context click (right click) if (PreviousGUILayoutRightClicked()) { ShowBindingItemContextMenu(i); } numBindingsDrawn++; } } } else { GUILayout.Label("No bound states", EditorStyles.boldLabel); } } else { EditorGUILayout.HelpBox("Please choose a target Animator to bind to.", MessageType.Error); } if (!Event.current.shift) { GUILayout.BeginHorizontal(); DrawNewBindingButton(); DrawMassNewButton(); DrawMassDeleteButton(); GUILayout.EndHorizontal(); } else { if (GUILayout.Button("Remap Unassigned GUIDs")) { MarkDirty(); var remappedStates = _stateBinder.RecoverUnassignedStates(); Debug.Log(string.Format("Remapped {0} GUIDS.", remappedStates)); } } DrawSortButton(); serializedObject.ApplyModifiedProperties(); }