예제 #1
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            base.get_serializedObject().Update();
            bool flag = this.m_lastPosition != this.m_TrackPositionProperty.get_vector3Value() || this.m_lastRotation != this.m_TrackRotationProperty.get_quaternionValue();

            this.m_lastPosition = this.m_TrackPositionProperty.get_vector3Value();
            this.m_lastRotation = this.m_TrackRotationProperty.get_quaternionValue();
            EditorGUI.BeginChangeCheck();
            this.DrawAvatarProperties();
            if (EditorGUI.EndChangeCheck())
            {
                this.RebuildGraph();
            }
            if (base.get_targets().Length == 1)
            {
                EditorGUI.BeginChangeCheck();
                EditorGUILayout.PropertyField(this.m_ApplyOffsetsProperty, AnimationTrackInspector.Styles.TrackOffsetTitle, new GUILayoutOption[0]);
                if (EditorGUI.EndChangeCheck())
                {
                    this.RebuildGraph();
                }
                Animator animator = this.GetAnimator();
                bool     flag2    = animator == null || !TimelineAnimationUtilities.ValidateOffsetAvailabitity(base.timelineWindow.state.currentDirector, animator) || !this.m_ApplyOffsetsProperty.get_boolValue();
                using (new EditorGUI.DisabledScope(flag2))
                {
                    EditorGUI.set_indentLevel(EditorGUI.get_indentLevel() + 1);
                    float num  = 0f;
                    float num2 = 0f;
                    GUI.get_skin().get_button().CalcMinMaxWidth(AnimationTrackInspector.Styles.PositionIcon, ref num, ref num2);
                    AnimationTrackInspector.ShowMotionOffsetEditModeToolbar(ref this.m_OffsetEditMode);
                    SceneView.RepaintAll();
                    EditorGUI.BeginChangeCheck();
                    EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                    EditorGUILayout.PropertyField(this.m_TrackPositionProperty, new GUILayoutOption[0]);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                    AnimationPlayableAssetInspector.ShowRotationField(this.m_TrackRotationProperty);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUI.set_indentLevel(EditorGUI.get_indentLevel() - 1);
                    flag |= EditorGUI.EndChangeCheck();
                    if (flag)
                    {
                        AnimationTrack animationTrack = (AnimationTrack)base.get_target();
                        animationTrack.UpdateClipOffsets();
                        this.Evaluate();
                    }
                }
            }
            else
            {
                GUILayout.Label(AnimationTrackInspector.Styles.TrackOffsetCannotBeEditedWarning, EditorStyles.get_helpBox(), new GUILayoutOption[0]);
            }
            AnimationTrackInspector.MatchTargetsField(this.m_MatchFieldsProperty, null, null, false);
            base.get_serializedObject().ApplyModifiedProperties();
        }
 public static void UpdateTrackOffset(AnimationTrack track, Transform transform, TimelineAnimationUtilities.RigidTransform offsets)
 {
     if (transform != null && transform.get_parent() != null)
     {
         offsets.position = transform.get_parent().InverseTransformPoint(offsets.position);
         offsets.rotation = Quaternion.Inverse(transform.get_parent().get_rotation()) * offsets.rotation;
         MathUtils.QuaternionNormalize(ref offsets.rotation);
     }
     track.position = offsets.position;
     track.rotation = offsets.rotation;
     track.UpdateClipOffsets();
 }
        public static void UpdateTrackOffset(AnimationTrack track, Transform transform, RigidTransform offsets)
        {
            if (transform != null && transform.parent != null)
            {
                offsets.position = transform.parent.InverseTransformPoint(offsets.position);
                offsets.rotation = Quaternion.Inverse(transform.parent.rotation) * offsets.rotation;
                MathUtils.QuaternionNormalize(ref offsets.rotation);
            }

            track.position    = offsets.position;
            track.eulerAngles = AnimationUtility.GetClosestEuler(offsets.rotation, track.eulerAngles, RotationOrder.OrderZXY);
            track.UpdateClipOffsets();
        }