예제 #1
0
        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();
        }
예제 #2
0
        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();
        }