enemy7's picture
Upload 1553 files
898c672
raw
history blame
2.33 kB
local camera = {}
camera.init = function(param)
local self = {}
self.position = {x = param.position[1], y = param.position[2]}
self.zoom = param.zoom
self.set_zoom = param.set_zoom
self.players = {}
return self
end
camera.hold = function(self, param)
if param.position then
self.position = {x = param.position[1], y = param.position[2]}
end
if param.zoom then
self.zoom = param.zoom
end
self.hold_time = game.tick + (param.time*60)
end
camera.move = function (self, param)
local d_t = param.time * 60
local start_tick = game.tick + 1
local tick_to_finish = start_tick + d_t
local o_x = self.position.x
local o_y = self.position.y
local o_z = self.zoom
local v_x = o_x
local v_y = o_y
if param.position then
v_x = param.position[1]
v_y = param.position[2]
elseif param.entity then
v_x = param.entity.position.x
v_y = param.entity.position.y
end
local d_x = (v_x-o_x)/d_t
local d_y = (v_y-o_y)/d_t
local d_z = (param.zoom - self.zoom)/d_t or 0
self.position_on_tick = {}
local d = 1
for k = start_tick, tick_to_finish do
self.position_on_tick[k] = {position = {x = (o_x + (d_x*d)), y = (o_y + (d_y*d))}, zoom = (o_z + d_z*d)}
d = d + 1
end
self.position_on_tick[tick_to_finish].last = true
end
camera.update = function(self)
if not self then return end
local tick = game.tick
if self.position_on_tick then
local new_position = self.position_on_tick[tick]
if new_position then
self.position = new_position.position
self.zoom = new_position.zoom
if new_position.last then
self.position_on_tick = nil
end
end
end
if self.hold_time then
if tick >= self.hold_time then
self.hold_time = nil
end
end
if self.following then
if self.following.valid then
self.position = self.following.position
else
self.following = nil
end
end
for k, player in pairs (self.players) do
player.teleport(self.position)
if self.set_zoom then
player.zoom = self.zoom
end
end
end
camera.follow = function(self, entity)
self.following = entity
end
camera.idle = function(self)
if self.position_on_tick then return false end
if self.hold_time then return false end
if self.following then return false end
return true
end
return camera