Exemple #1
0
 private static void animator_Cycled(AnimatorEventArgs e)
 {
     // pass the event up...
     if (SpriteAnimatorCycled != null)
     {
         SpriteAnimatorCycled(e);
     }
 }
Exemple #2
0
 private void ResetAll()
 {
     _selectedData     = null;
     _selectedEventArg = null;
     previewedMotion   = null;
 }
Exemple #3
0
    private void DrawEventData(EventData data)
    {
        EditorGUILayout.BeginVertical(EditorStyles.helpBox);

        using (new EditorGUILayout.HorizontalScope())
        {
            EditorGUILayout.LabelField("Display Name: ", GUILayout.MaxWidth(100));
            _selectedName = EditorGUILayout.TextField(_selectedName);
            if (GUILayout.Button("Rename", EditorStyles.toolbarButton, GUILayout.Width(60)))
            {
                data.Name = _selectedName;
            }
        }

        using (new EditorGUILayout.HorizontalScope())
        {
            using (var check = new EditorGUI.ChangeCheckScope())
            {
                EditorGUILayout.LabelField("Target Controller: ", GUILayout.MaxWidth(100));
                data.TargetController = EditorGUILayout.ObjectField(data.TargetController,
                                                                    typeof(AnimatorController), false) as AnimatorController;

                if (check.changed)
                {
                }
            }
        }

        if (data.TargetController != null)
        {
            // Draw Layers
            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
            EditorGUILayout.LabelField("1. Select Layer", EditorStyles.centeredGreyMiniLabel);

            var animatorController = (AnimatorController)data.TargetController;
            for (var i = 0; i < animatorController.layers.Length; i++)
            {
                var layer = animatorController.layers[i];

                if (i == _selectedLayer)
                {
                    GUI.backgroundColor = Color.green;
                }

                if (GUILayout.Button(i + " - " + layer.name))
                {
                    _selectedLayer = i;
                }

                GUI.backgroundColor = Color.white;
            }

            EditorGUILayout.EndVertical();

            // Draw States
            if (_selectedLayer != -1)
            {
                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                EditorGUILayout.LabelField("2. Select State", EditorStyles.centeredGreyMiniLabel);

                var stateMachine = animatorController.layers[_selectedLayer].stateMachine;
                for (var i = 0; i < stateMachine.states.Length; i++)
                {
                    var state = stateMachine.states[i];

                    if (state.state.nameHash == _selectedState)
                    {
                        GUI.backgroundColor = Color.green;
                    }

                    if (GUILayout.Button(state.state.name))
                    {
                        SetupPreview(state.state.motion);
                        previewedMotion = state.state.motion;
                        _selectedState  = state.state.nameHash;
//                        Debug.Log(_selectedState);
                        _selectedEventArg = null;
                    }

                    GUI.backgroundColor = Color.white;
                }

                EditorGUILayout.EndVertical();
            }

            // Draw Events
            if (_selectedState != -1)
            {
                EditorGUILayout.BeginVertical(EditorStyles.helpBox);

                var index = new StateIndex(_selectedLayer, _selectedState);
                if (!data.Configs.ContainsKey(index))
                {
                    data.Configs.Add(index, new AnimatorEvents());
                }

                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.LabelField("Normalized", GUILayout.Width(100));

                    using (var check = new EditorGUI.ChangeCheckScope())
                    {
                        _normalizedSetting = EditorGUILayout.Slider(_normalizedSetting, 0, 1);
                        if (check.changed)
                        {
                            if (_avatarPreview != null)
                            {
                                _avatarPreview.Animator.Play(0, 0, _normalizedSetting);
                                _avatarPreview.timeControl.normalizedTime = _normalizedSetting;
                            }

                            if (_selectedEventArg != null)
                            {
                                _selectedEventArg.NormalizedTime = _normalizedSetting;
                                data.Configs[index] =
                                    new AnimatorEvents(data.Configs[index].Value.OrderBy(x => x.NormalizedTime));
                            }
                        }
                    }

                    if (GUILayout.Button("Add Event", EditorStyles.toolbarButton))
                    {
                        var countNum = data.Configs[index].Value.Count;

                        var newEventArg = new AnimatorEventArgs
                        {
                            Name           = "New Event " + countNum,
                            NormalizedTime = _normalizedSetting
                        };

                        data.Configs[index].Value.Add(newEventArg);
                        data.Configs[index] = new AnimatorEvents(data.Configs[index].Value.OrderBy(x => x.NormalizedTime));

                        _selectedEventArg = newEventArg;
                        EditorUtility.SetDirty(_dataSet);
                    }
                }

                EditorGUILayout.LabelField("3. Edit Events", EditorStyles.centeredGreyMiniLabel);

                for (var i = 0; i < data.Configs[index].Value.Count; i++)
                {
                    var evt            = data.Configs[index].Value[i];
                    var normalizedTime = evt.NormalizedTime.ToString("F3");

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (_selectedEventArg == evt)
                        {
                            GUI.backgroundColor = Color.green;
                        }

                        if (GUILayout.Button(normalizedTime + " - " + evt.Name))
                        {
                            if (_selectedEventArg == evt)
                            {
                                _selectedEventArg = null;
                                continue;
                            }

                            _selectedEventArg  = evt;
                            _selectedEventName = evt.Name;
                            _normalizedSetting = evt.NormalizedTime;

                            if (_avatarPreview != null)
                            {
                                _avatarPreview.Animator.Play(0, 0, evt.NormalizedTime);
                                _avatarPreview.timeControl.normalizedTime = evt.NormalizedTime;
                            }
                        }

                        GUI.backgroundColor = Color.white;

                        if (GUILayout.Button("DEL", GUILayout.Width(45)))
                        {
                            _delayedActions.Add(() => data.Configs[index].Value.Remove(evt));
                            if (_selectedEventArg == evt)
                            {
                                _selectedEventArg = null;
                            }
                        }
                    }
                }

                if (_selectedEventArg != null)
                {
                    EditorGUILayout.BeginVertical(EditorStyles.helpBox);

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorGUILayout.LabelField("Display Name: ", GUILayout.MaxWidth(100));
                        _selectedEventName = EditorGUILayout.TextField(_selectedEventName);
                        if (GUILayout.Button("Rename", EditorStyles.toolbarButton, GUILayout.Width(60)))
                        {
                            _selectedEventArg.Name = _selectedEventName;
                        }
                    }

                    _selectedEventArg.Type =
                        (AnimatorEventType)EditorGUILayout.EnumPopup("Event Type", _selectedEventArg.Type);

                    switch (_selectedEventArg.Type)
                    {
                    case AnimatorEventType.Pure:
                        break;

                    case AnimatorEventType.Float:
                        _selectedEventArg.FloatParm =
                            EditorGUILayout.FloatField("Float Parameter", _selectedEventArg.FloatParm);
                        break;

                    case AnimatorEventType.Int:
                        _selectedEventArg.IntParm =
                            EditorGUILayout.IntField("Int Parameter", _selectedEventArg.IntParm);
                        break;

                    case AnimatorEventType.String:
                        _selectedEventArg.StringParm =
                            EditorGUILayout.TextField("String Parameter", _selectedEventArg.StringParm);
                        break;

                    case AnimatorEventType.Object:
                        _selectedEventArg.ObjectParm = EditorGUILayout.ObjectField("Object Parameter",
                                                                                   _selectedEventArg.ObjectParm, typeof(Object), false);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    EditorGUILayout.EndVertical();
                }

                EditorGUILayout.EndVertical();
            }
        }

        EditorGUILayout.EndVertical();
    }