test/snake/snake.c

changeset 229
5c05b5164a16
parent 227
a5775e8dbc13
child 230
02090b2d147e
equal deleted inserted replaced
228:ecda73508be6 229:5c05b5164a16
228 asc_scene_node_set_zindex(gamefield, -2); 228 asc_scene_node_set_zindex(gamefield, -2);
229 asc_scene_add_node(MAIN_SCENE, gamefield); 229 asc_scene_add_node(MAIN_SCENE, gamefield);
230 } 230 }
231 231
232 static asc_rect update_viewport_for_window_resize(asc_vec2u window_size) { 232 static asc_rect update_viewport_for_window_resize(asc_vec2u window_size) {
233
234 // TODO: special case: window is SO small that nothing would be rendered
235
236 // remove margins
237 const unsigned margin = 10;
238 window_size.width -= 2*margin;
239 window_size.height -= 2*margin;
240
241 // remove space for score, power-ups, etc.
242 const unsigned left_area = (unsigned) (asc_active_window->ui_scale*200);
243 window_size.width -= left_area;
244
233 // Compute scaling and offsets 245 // Compute scaling and offsets
234 unsigned viewport_size, offset_x = 0, offset_y = 0; 246 unsigned viewport_size, offset_x = 0, offset_y = 0;
235 if (window_size.width > window_size.height) { 247 if (window_size.width > window_size.height) {
236 // Wider window: letterbox (black bars on top/bottom) 248 // Wider window: letterbox (black bars on top/bottom)
237 offset_x = (window_size.width - window_size.height) / 2; 249 offset_x = (window_size.width - window_size.height) / 2;
239 } else { 251 } else {
240 // Taller window: pillarbox (black bars on sides) 252 // Taller window: pillarbox (black bars on sides)
241 offset_y = (window_size.height - window_size.width) / 2; 253 offset_y = (window_size.height - window_size.width) / 2;
242 viewport_size = window_size.width; 254 viewport_size = window_size.width;
243 } 255 }
256 offset_x += left_area + margin;
257 offset_y += margin;
244 258
245 // Set the viewport to the scaled and centered region 259 // Set the viewport to the scaled and centered region
246 return ASC_RECT(offset_x, offset_y, viewport_size, viewport_size); 260 return ASC_RECT(offset_x, offset_y, viewport_size, viewport_size);
247 } 261 }
248 262
259 273
260 // create window 274 // create window
261 AscWindowSettings settings; 275 AscWindowSettings settings;
262 asc_window_settings_init_defaults(&settings); 276 asc_window_settings_init_defaults(&settings);
263 settings.title = "Snake"; 277 settings.title = "Snake";
264 settings.dimensions = ASC_VEC2U(800, 800); 278 settings.dimensions = ASC_VEC2U(900, 600);
279 // TODO: resize window depending on ui scale factor
265 asc_window_initialize(0, &settings); 280 asc_window_initialize(0, &settings);
266 asc_ui_scale_auto(); 281 asc_ui_scale_auto();
267 282
268 // load textures 283 // load textures
269 init_textures(); 284 init_textures();

mercurial