Exemplo n.º 1
0
 public KeyframedMotion(KeyframedMotion m)
     : base(m)
 {
     CurrentFrame        = m.CurrentFrame;
     CurrentTimePosition = m.CurrentTimePosition;
     Flags            = m.Flags;
     PlayMode         = m.PlayMode;
     IsRunning        = m.IsRunning;
     IsRunningReverse = false;
 }
Exemplo n.º 2
0
        public static KeyframedMotion Deserialize(Stream input)
        {
            var     data = (Map)LlsdBinary.Deserialize(input);
            var     m    = new KeyframedMotion();
            AnArray pos  = null;
            AnArray rot  = null;
            AnArray durations;

            m.PlayMode         = (Mode)data["mode"].AsInt;
            m.IsRunning        = data["running"].AsBoolean;
            m.IsRunningReverse = data["runningreverse"].AsBoolean;

            durations = (AnArray)data["durations"];
            if (data.ContainsKey("positions"))
            {
                pos      = data["positions"] as AnArray;
                m.Flags |= DataFlags.Translation;
                if (durations.Count != pos.Count)
                {
                    throw new KeyframeFormatException("Positions.Count does not match Durations.Count");
                }
            }

            if (data.ContainsKey("rotations"))
            {
                rot      = data["rotations"] as AnArray;
                m.Flags |= DataFlags.Rotation;
                if (durations.Count != rot.Count)
                {
                    throw new KeyframeFormatException("Rotations.Count does not match Durations.Count");
                }
            }

            for (int i = 0; i < durations.Count; ++i)
            {
                var frame = new Keyframe
                {
                    Duration = durations[i].AsReal
                };
                if (rot != null)
                {
                    frame.TargetRotation = rot[i].AsQuaternion;
                }
                if (pos != null)
                {
                    frame.TargetPosition = pos[i].AsVector3;
                }
                m.Add(frame);
            }

            return(m);
        }