demo/snake/snake.c

changeset 287
359eaf2a8bd2
parent 279
97a1a7fb4f1a
child 288
8796f03aac26
--- 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();

mercurial