Ejemplo n.º 1
0
        internal Motion(MotionDefinition motion, List <MotionControllerDefinition> controllers) : this()
        {
            Duration = motion.Duration;
            for (int i = 0; i < controllers.Count; i++)
            {
                // Remove useless controllers
                var controller = controllers[i];
                var keyframes  = motion.Tracks[i].Keyframes;
                var isDummy    = false;
                if (keyframes.Count == 1 && keyframes[0].Time == 0)
                {
                    var keyframe = keyframes[0];
                    switch (controller.Type)
                    {
                    //case ControllerType.Position:
                    //    switch ( keyframe )
                    //    {
                    //        case Vector3Key vector3Key:
                    //            isDummy = vector3Key.Value == Vector3.Zero;
                    //            break;
                    //    }
                    //    break;

                    //case ControllerType.Rotation:
                    //    switch ( keyframe )
                    //    {
                    //        case QuaternionKey quaternionKey:
                    //            isDummy = quaternionKey.Value == Quaternion.Identity;
                    //            break;
                    //    }
                    //    break;

                    case ControllerType.Scale:
                        switch (keyframe)
                        {
                        case Vector3Key vector3Key:
                            isDummy = vector3Key.Value == Vector3.One;
                            break;
                        }
                        break;
                    }
                }

                if (!isDummy)
                {
                    Controllers.Add(new NodeController(controller, keyframes));
                }
            }
        }
Ejemplo n.º 2
0
        public static VisualElement CreateHolder(MotionDefinition def, AvatarParameterData data)
        {
            void Action()
            {
                var layer    = def.GetParents <AnimatorLayerDefinition>().FirstOrDefault();
                var animator = def.GetParents <AnimatorDefinition>().FirstOrDefault();

                if ((layer?.IsRealized ?? false) && (animator?.IsRealized ?? false))
                {
                    animator.Animator.SelectAnimatorLayer(layer.Layer);
                    EditorApplication.delayCall += () => Selection.activeObject = def.Motion;
                }
            }

            var fields = CreateHolder(Action, $"{def}", def);

            fields.SetupDeletion(fields.DeleteButton, fields.ObjectField, def, data);
            return(fields.Container);
        }
Ejemplo n.º 3
0
        private List <MotionDefinition> BuildMotionDefinitions()
        {
            var motionDefs     = new List <MotionDefinition>();
            var motionDefCache = new Dictionary <Motion, MotionDefinition>();

            foreach (var motion in Motions)
            {
                if (motion == null)
                {
                    motionDefs.Add(null);
                    continue;
                }

                if (motionDefCache.TryGetValue(motion, out var motionDef))
                {
                    motionDefs.Add(motionDef);
                    continue;
                }

                motionDef = new MotionDefinition
                {
                    Duration = motion.Duration,
                };

                foreach (var controllerDef in mControllerDefinitions)
                {
                    var controller = motion.Controllers.FirstOrDefault(x => x.GetDefinitionHash() == controllerDef.GetHashCode());

                    if (controller != null)
                    {
                        motionDef.Tracks.Add(new KeyframeTrack(controller.Keys));
                        continue;
                    }

                    // Need to add dummy values
                    var keyframes = new List <IKey>();

                    void AddPlaceholderKeyframe(short time)
                    {
                        IKey key;

                        switch (controllerDef.Type)
                        {
                        case ControllerType.Position:
                            key = new Vector3Key();
                            break;

                        case ControllerType.Type1:
                        case ControllerType.Morph:
                        case ControllerType.Type8:
                            key = new UInt32Key();
                            break;

                        case ControllerType.Scale:
                            key = new Vector3Key {
                                Value = Vector3.One
                            };
                            break;

                        case ControllerType.Rotation:
                            key = new QuaternionKey {
                                Value = Quaternion.Identity
                            };
                            break;

                        case ControllerType.Type5:
                            key = new SingleKey();
                            break;

                        default:
                            throw new InvalidOperationException();
                        }

                        key.Time = time;
                        keyframes.Add(key);
                    }

                    AddPlaceholderKeyframe(0);
                    motionDef.Tracks.Add(new KeyframeTrack(keyframes));
                }

                motionDefs.Add(motionDef);
                motionDefCache[motion] = motionDef;
            }

            return(motionDefs);
        }