--- a/demo/snake/snake.c Sun Nov 16 21:12:20 2025 +0100 +++ b/demo/snake/snake.c Sun Nov 16 22:00:13 2025 +0100 @@ -139,7 +139,7 @@ static void main_scene_frame_scale(AscBehavior *behavior) { if (!asc_active_window->resized) return; asc_ptr_cast(AscRectangle, frame, behavior->node); - asc_rectangle_set_bounds(frame, MAIN_SCENE->camera.viewport); + asc_rectangle_set_bounds(frame, asc_scene_viewport(MAIN_SCENE)); } static void backdrop_create(void) { @@ -196,7 +196,7 @@ AscSceneNode *node = behavior->node; // center the "game over" text in the game field viewport - const asc_rect main_scene_viewport = MAIN_SCENE->camera.viewport; + const asc_rect main_scene_viewport = asc_scene_viewport(MAIN_SCENE); asc_scene_node_set_position2f(node, ASC_VEC2F( main_scene_viewport.pos.x + main_scene_viewport.size.x / 2.f, main_scene_viewport.pos.y + main_scene_viewport.size.y / 2.f - 36 @@ -543,32 +543,35 @@ asc_window_initialize(0, asc_gl_context_settings_default(4, 0)); asc_window_set_title(0, "Snake"); asc_window_set_size(0, asc_vec2_ftou( - asc_vec2f_scale(ASC_VEC2F(1000+HUD_WIDTH, 1000), asc_ui_scale_auto()))); + asc_vec2f_scale(ASC_VEC2F(600+HUD_WIDTH, 600), asc_ui_scale_auto()))); asc_window_center(0); // load textures textures_init(); // initialize backdrop scene - asc_scene_init(BACKDROP_SCENE, "backdrop", + AscCamera backdrop_camera; + asc_camera_init(&backdrop_camera, .type = ASC_CAMERA_ORTHO, .projection_update_func = asc_camera_ortho_update_size ); + asc_scene_init(BACKDROP_SCENE, "backdrop", &backdrop_camera); backdrop_create(); - // Initialize main scene - asc_scene_init(MAIN_SCENE, "main", + // Initialize the main scene + const unsigned initial_view_distance = 10; + AscCamera main_camera; + asc_camera_init(&main_camera, .type = ASC_CAMERA_ORTHO, - .ortho.rect = ASC_RECT( - -GAME_FIELD_TILE_SIZE, - -GAME_FIELD_TILE_SIZE, - (GAME_FIELD_SIZE+2)*GAME_FIELD_TILE_SIZE, - (GAME_FIELD_SIZE+2)*GAME_FIELD_TILE_SIZE + .ortho.rect = ASC_RECT(0, 0, + initial_view_distance*2*GAME_FIELD_TILE_SIZE, + initial_view_distance*2*GAME_FIELD_TILE_SIZE ), .viewport_clear = true, .clear_color = ASC_RGBi(0, 32, 16), .viewport_update_func = main_scene_viewport_update ); + asc_scene_init(MAIN_SCENE, "main", &main_camera); // create the fps counter AscSceneNode *fps_counter = fps_counter_create();