public KeyframedMotion(KeyframedMotion m) : base(m) { CurrentFrame = m.CurrentFrame; CurrentTimePosition = m.CurrentTimePosition; Flags = m.Flags; PlayMode = m.PlayMode; IsRunning = m.IsRunning; IsRunningReverse = false; }
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); }