@@ -172,22 +172,16 @@ function M.get_display_size()
172
172
return DISPLAY_WIDTH , DISPLAY_HEIGHT
173
173
end
174
174
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 )
185
180
end
186
181
187
182
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 )
191
185
local pos = camera_world_pos - vmath .rotate (rot , OFFSET )
192
186
if offset then
193
187
pos = pos + offset
@@ -208,9 +202,14 @@ function M.init(camera_id, camera_script_url, settings)
208
202
assert (camera_id , " You must provide a camera id" )
209
203
assert (camera_script_url , " You must provide a camera script url" )
210
204
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 )
214
213
end
215
214
216
215
@@ -354,8 +353,12 @@ function M.update(camera_id, dt)
354
353
end
355
354
end
356
355
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 )
359
362
end
360
363
361
364
488
491
function M .set_zoom (camera_id , zoom )
489
492
assert (camera_id , " You must provide a camera id" )
490
493
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 )
492
498
end
493
499
494
500
0 commit comments