Beispiel #1
0
        /************************************************************************************************************************/

        /// <summary>Initializes the `transition` based on the `state`.</summary>
        private static void GetDetailsFromState(AnimatorState state, ITransitionDetailed transition)
        {
            if (state == null ||
                transition == null)
            {
                return;
            }

            transition.Speed = state.speed;

            var isForwards     = state.speed >= 0;
            var defaultEndTime = AnimancerEvent.Sequence.GetDefaultNormalizedEndTime(state.speed);
            var endTime        = defaultEndTime;

            var exitTransitions = state.transitions;

            for (int i = 0; i < exitTransitions.Length; i++)
            {
                var exitTransition = exitTransitions[i];
                if (exitTransition.hasExitTime)
                {
                    if (isForwards)
                    {
                        if (endTime > exitTransition.exitTime)
                        {
                            endTime = exitTransition.exitTime;
                        }
                    }
                    else
                    {
                        if (endTime < exitTransition.exitTime)
                        {
                            endTime = exitTransition.exitTime;
                        }
                    }
                }
            }

            if (endTime != defaultEndTime && AnimancerUtilities.TryGetWrappedObject(transition, out IHasEvents events))
            {
                if (events.SerializedEvents == null)
                {
                    events.SerializedEvents = new AnimancerEvent.Sequence.Serializable();
                }
                events.SerializedEvents.SetNormalizedEndTime(endTime);
            }
        }
Beispiel #2
0
        /************************************************************************************************************************/

        private void DoPreviewTimeButton(ref Rect area, ref float value, ITransitionDetailed transition,
                                         float[] multipliers)
        {
            if (!TransitionPreviewWindow.IsPreviewingCurrentProperty())
            {
                return;
            }

            var previewTime = TransitionPreviewWindow.PreviewNormalizedTime;

            const string Tooltip =
                "• Left Click = preview the current value of this field." +
                "\n• Right Click = set this field to use the current preview time.";

            var displayValue = GetDisplayValue(value, nextDefaultValue);

            var multiplier = multipliers[(int)Units.Normalized];

            displayValue *= multiplier;

            var isCurrent = Mathf.Approximately(displayValue, previewTime);

            var buttonArea = area;

            if (TransitionDrawer.DoPreviewButtonGUI(ref buttonArea, isCurrent, Tooltip))
            {
                if (Event.current.button != 1)
                {
                    TransitionPreviewWindow.PreviewNormalizedTime = displayValue;
                }
                else
                {
                    value = previewTime / multiplier;
                }
            }

            // Only steal the button area for single line fields.
            if (area.height <= LineHeight)
            {
                area = buttonArea;
            }
        }
Beispiel #3
0
 /// <summary>Returns true if the `node` is not null and <see cref="ITransitionDetailed.IsValid"/>.</summary>
 public static bool IsValid(this ITransitionDetailed transition) => transition != null && transition.IsValid;
 /// <summary>Returns true if the `node` is not null and <see cref="ITransitionDetailed.IsValid"/>.</summary>
 public static bool IsValid(this ITransitionDetailed transition)
 {
     return(transition != null && transition.IsValid);
 }