My animation module:
do --// Animation
local self = animate
self.inprogress = false
self.play = function(self,animdata)
local cache = {}
self.inprogress = true
for frame,framedata in pairs(animdata) do
if gun[framedata[1]] then
local m = framedata[1]
local endc = framedata[2]
local d = framedata[3]
local start = gun[m]
for i = 0,1,0.1 do
local endc = framedata[2]
gun[m] = lerp(start,endc,i)
RunService.RenderStepped:wait()
end
if d then wait(d) end
elseif framedata[1] == "weldmag" then
local mw = gun.model.PrimaryPart.Mag
cache.oldmagweld = mw
mw.Parent = nil
mw = Instance.new("Motor6D")
mw.Part0 = gun.larm
mw.Part1 = gun.model.Mag
mw.Parent = cam
mw.C0 = cf(0,0,-1.5)
cache.newmagweld = mw
elseif framedata[1] == "returnmag" then
cache.oldmagweld.Parent = gun.model.PrimaryPart
cache.newmagweld:Destroy()
end
end
self.inprogress = true
end
end
All the CFrames that go into the play function (in a ModuleScript):
local reload = function()
local cam = workspace.CurrentCamera
local ra = wfc(cam,"rightarm")
local la = wfc(cam,"rightarm")
local rw = wfc(cam,"rightarmweld")
local lw = wfc(cam,"leftarmweld")
return {
{"janimcf0",cf(0,0.3,0)*ang(0,0,rad(-20))},
{"lanimcf0",cf(-0.5,0.3,-0.5),0.1},
{"weldmag","larm"},
{"lanimcf0",cf(-0.5,2.5,-0.5),0.1},
{"lanimcf0",cf(-0.5,0.3,-0.5),0.1},
{"returnmag"},
{"janimcf0",cf()},
{"lanimcf0",cf()},
}
end
How the Motor6D's get animated in a RenderStepped function
self.janimcf0 = cf(self.janimcf0p.p)*ang(self.janimcf0r.p.X,self.janimcf0r.p.Y,self.janimcf0r.p.Z)
self.lanimcf0 = cf(self.lanimcf0p.p)*ang(self.lanimcf0r.p.X,self.lanimcf0r.p.Y,self.lanimcf0r.p.Z)
self.joint.C0 = cf(1,-1.2,-0.3)
* self.janimcf0
self.ljoint.C0 = self.lc0
* self.lanimcf0
Everytime a new "frame" starts and ends it bounces forward, backwards, left, right, upwards or downwards. It is caused by the ljoint's C0 being set to lanimcf0
https://gyazo.com/946da6ca19f91bd1b385b98044db3fd7
I really don't know why this is happening. Here is a pastebin of the whole script if that would help
