Advertisement
CloneTrooper1019

[Roblox] KeyframeSequence Serialize/Deserialize

Jul 15th, 2015
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.15 KB | None | 0 0
  1. local function deserializeEnum(str)
  2.     local stack = getfenv()
  3.     for part in str:gmatch("[^.]+") do
  4.         stack = stack[part]
  5.     end
  6.     return stack
  7. end
  8.  
  9. function serializeKFS(kfs)
  10.     local http = game:GetService("HttpService")
  11.     local data = {}
  12.     data.Name = kfs.Name
  13.     data.Loop = kfs.Loop
  14.     data.Priority = tostring(kfs.Priority)
  15.     data.Keyframes = {}
  16.     local function registerPose(pose,parent)
  17.         local sPose = {}
  18.         sPose.Name = pose.Name
  19.         sPose.CFrame = {pose.CFrame:components()}
  20.         sPose.Weight = pose.Weight
  21.         sPose.MaskWeight = pose.MaskWeight
  22.         sPose.SubPoses = {}
  23.         for _,subPose in pairs(pose:GetChildren()) do
  24.             registerPose(subPose,sPose.SubPoses)
  25.         end
  26.         table.insert(parent,sPose)
  27.     end
  28.     local keyframes = kfs:GetChildren()
  29.     table.sort(keyframes,function (a,b)
  30.         return a.Time < b.Time
  31.     end)
  32.     for index,keyframe in pairs(keyframes) do
  33.         local sKeyframe = {}
  34.         sKeyframe.Name = keyframe.Name
  35.         sKeyframe.Time = keyframe.Time
  36.         sKeyframe.Poses = {}
  37.         for _,pose in pairs(keyframe:GetChildren()) do
  38.             registerPose(pose,sKeyframe.Poses)
  39.         end
  40.         data.Keyframes[index] = sKeyframe
  41.     end
  42.     return http:JSONEncode(data)
  43. end
  44.  
  45. function deserializeKFS(dataStr)
  46.     local http = game:GetService("HttpService")
  47.     local data = http:JSONDecode(dataStr)
  48.     local kfs = Instance.new("KeyframeSequence")
  49.     kfs.Name = data.Name
  50.     kfs.Loop = data.Loop
  51.     kfs.Priority = deserializeEnum(data.Priority)
  52.     local function registerPose(sPose,parent)
  53.         local pose = Instance.new("Pose")
  54.         pose.Name = sPose.Name
  55.         pose.CFrame = CFrame.new(unpack(sPose.CFrame))
  56.         pose.Weight = sPose.Weight
  57.         pose.MaskWeight = sPose.MaskWeight
  58.         for _,sSubPose in pairs(sPose.SubPoses) do
  59.             registerPose(sSubPose,pose)
  60.         end
  61.         pose.Parent = parent
  62.     end
  63.     for _,sKeyframe in pairs(data.Keyframes) do
  64.         local keyframe = Instance.new("Keyframe")
  65.         keyframe.Name = sKeyframe.Name
  66.         keyframe.Time = sKeyframe.Time
  67.         for _,sPose in pairs(sKeyframe.Poses) do
  68.             registerPose(sPose,keyframe)
  69.         end
  70.         keyframe.Parent = kfs
  71.     end
  72.     return kfs
  73. end
  74.  
  75. local serialized = serializeKFS(workspace.Test)
  76. print(serialized)
  77. local deserialized = deserializeKFS(serialized)
  78. deserialized.Parent = workspace
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement