Skip to content

Instantly share code, notes, and snippets.

@johnnyjr
Created September 23, 2016 06:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save johnnyjr/39d44e22086acc5730b96896f4c9a94b to your computer and use it in GitHub Desktop.
Save johnnyjr/39d44e22086acc5730b96896f4c9a94b to your computer and use it in GitHub Desktop.
function update(self, dt)
local camera_pos=self.original_position or go.get_position()
self.shake=vmath.vector3()
if self.shakes and next(self.shakes) then
for i,shake in pairs(self.shakes) do
shake.time=shake.time-dt
shake.to_target=shake.to_target-dt
if shake.to_target<=0 then
shake.a=vmath.vector3(shake.b)
shake.b=vmath.vector3((math.random()-0.5)*shake.x,(math.random()-0.5)*shake.y, 0)
shake.to_target=math.min(shake.time, shake.speed)
shake.to_target_max=shake.to_target
end
self.shake=self.shake+vmath.lerp(shake.to_target/shake.to_target_max, shake.b, shake.a)
if shake.time<=0 then
table.remove(self.shakes, i)
end
end
elseif self.original_position then
camera_pos=self.original_position
self.original_position=nil
end
go.set_position(camera_pos+self.shake)
end
function on_message(self, message_id, message, sender)
if message_id==hash("shake") then
self.original_position=go.get_position()
if not self.shakes then
self.shakes={}
end
message.to_target=0
message.a=vmath.vector3()
message.b=vmath.vector3()
table.insert(self.shakes, message)
end
end
function on_reload(self)
msg.post("#", "shake", {time=2.75, x=35, y=35, speed=0.033})
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment