Skip to content

Commit da991f9

Browse files
committed
Changed so that camera.set_zoom() is synchronous
Fixes #27
1 parent 04785b4 commit da991f9

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,3 +437,8 @@ Enable the camera. While the camera is enabled it will update it's view and proj
437437
Disable the camera.
438438

439439
msg.post("camera", "disable")
440+
441+
### use_projection
442+
Set which projection to use.
443+
444+
msg.post("camera", "use_projection", { projection = hash("FIXED_AUTO") })

orthographic/camera.lua

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -172,22 +172,16 @@ function M.get_display_size()
172172
return DISPLAY_WIDTH, DISPLAY_HEIGHT
173173
end
174174

175-
local function calculate_projection(camera_id)
176-
local camera = cameras[camera_id]
177-
local projector_id = go.get(camera.url, "projection")
178-
assert(projectors[projector_id], "Unknown projection id")
179-
local near_z = go.get(camera.url, "near_z")
180-
local far_z = go.get(camera.url, "far_z")
181-
local zoom = go.get(camera.url, "zoom")
182-
camera.zoom = zoom
183-
local projector_fn = projectors[projector_id] or projectors[M.PROJECTOR.DEFAULT]
184-
return projector_fn(camera_id, near_z, far_z, zoom)
175+
local function calculate_projection(camera)
176+
local projection_id = camera.projection_id
177+
assert(projectors[projection_id], "Unknown projection id")
178+
local projector_fn = projectors[projection_id] or projectors[M.PROJECTOR.DEFAULT]
179+
return projector_fn(camera_id, camera.near_z, camera.far_z, camera.zoom)
185180
end
186181

187182

188-
189-
local function calculate_view(camera_id, camera_world_pos, offset)
190-
local rot = go.get_world_rotation(camera_id)
183+
local function calculate_view(camera, camera_world_pos, offset)
184+
local rot = go.get_world_rotation(camera.id)
191185
local pos = camera_world_pos - vmath.rotate(rot, OFFSET)
192186
if offset then
193187
pos = pos + offset
@@ -208,9 +202,14 @@ function M.init(camera_id, camera_script_url, settings)
208202
assert(camera_id, "You must provide a camera id")
209203
assert(camera_script_url, "You must provide a camera script url")
210204
cameras[camera_id] = settings
211-
cameras[camera_id].url = camera_script_url
212-
cameras[camera_id].view = calculate_view(camera_id, go.get_world_position(camera_id))
213-
cameras[camera_id].projection = calculate_projection(camera_id)
205+
local camera = cameras[camera_id]
206+
camera.id = camera_id
207+
camera.url = camera_script_url
208+
camera.projection_id = go.get(camera_script_url, "projection")
209+
camera.near_z = go.get(camera_script_url, "near_z")
210+
camera.far_z = go.get(camera_script_url, "far_z")
211+
camera.view = calculate_view(camera, go.get_world_position(camera_id))
212+
camera.projection = calculate_projection(camera)
214213
end
215214

216215

@@ -354,8 +353,12 @@ function M.update(camera_id, dt)
354353
end
355354
end
356355
camera.offset = offset
357-
camera.view = calculate_view(camera_id, camera_world_pos, offset)
358-
camera.projection = calculate_projection(camera_id)
356+
camera.projection_id = go.get(camera.url, "projection")
357+
camera.near_z = go.get(camera.url, "near_z")
358+
camera.far_z = go.get(camera.url, "far_z")
359+
camera.zoom = go.get(camera.url, "zoom")
360+
camera.view = calculate_view(camera, camera_world_pos, offset)
361+
camera.projection = calculate_projection(camera)
359362
end
360363

361364

@@ -488,7 +491,10 @@ end
488491
function M.set_zoom(camera_id, zoom)
489492
assert(camera_id, "You must provide a camera id")
490493
assert(zoom, "You must provide a zoom level")
491-
msg.post(cameras[camera_id].url, "zoom_to", { zoom = zoom })
494+
local camera = cameras[camera_id]
495+
msg.post(camera.url, "zoom_to", { zoom = zoom })
496+
camera.zoom = zoom
497+
camera.projection = calculate_projection(camera)
492498
end
493499

494500

0 commit comments

Comments
 (0)