local DEFAULT_CAMERA_SMOOTHING = 30 Cam = {} Cam.__index = Cam function Cam.new(x, y) local self = setmetatable({}, Cam) self.x = x or 0 self.y = y or 0 self.realx = self.x self.realy = self.y self.zoom = 2 self.smoothing = DEFAULT_CAMERA_SMOOTHING return self end function Cam:update(dt) self.realx = dlerp(self.realx, self.x, self.smoothing * dt) self.realy = dlerp(self.realy, self.y, self.smoothing * dt) end local active_cam = Cam.new() function get_active_camera() return active_cam end function set_active_camera(new_cam) active_cam = new_cam end function use_camera_transform() local w, h = SCR_WIDTH / 2, SCR_HEIGHT / 2 lg.scale(active_cam.zoom) lg.translate( -active_cam.realx + w / active_cam.zoom, -active_cam.realy + h / active_cam.zoom) end