X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=cb23bae615649c143a0e385aa126f6eb869a4f63;hb=41def9c1d8c6939b8754fdab43579272e49d4da4;hp=30df9f7cafa12b121a177f0cbd1221e6bc8e7280;hpb=5cdf02eb2a6d9627f7461ab9d386698cb7596096;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 30df9f7c..cb23bae6 100644 --- a/src/tools.c +++ b/src/tools.c @@ -8088,6 +8088,22 @@ void ToggleFullscreenIfNeeded() void ChangeViewportPropertiesIfNeeded() { + int *door_1_x = &DX; + int *door_1_y = &DY; + int *door_2_x = (game_status == GAME_MODE_EDITOR ? &EX : &VX); + int *door_2_y = (game_status == GAME_MODE_EDITOR ? &EY : &VY); + int gfx_game_mode = (game_status == GAME_MODE_PLAYING || + game_status == GAME_MODE_EDITOR ? game_status : + GAME_MODE_MAIN); + struct RectWithBorder *vp_playfield = &viewport.playfield[gfx_game_mode]; + struct RectWithBorder *vp_door_1 = &viewport.door_1[gfx_game_mode]; + struct RectWithBorder *vp_door_2 = &viewport.door_2[gfx_game_mode]; + int border_size = vp_playfield->border_size; + int new_sx = vp_playfield->x + border_size; + int new_sy = vp_playfield->y + border_size; + int new_scr_fieldx = (vp_playfield->width - 2 * border_size) / TILESIZE; + int new_scr_fieldy = (vp_playfield->height - 2 * border_size) / TILESIZE; + if (viewport.window.width != WIN_XSIZE || viewport.window.height != WIN_YSIZE) { @@ -8105,64 +8121,33 @@ void ChangeViewportPropertiesIfNeeded() #endif } - if (game_status == GAME_MODE_PLAYING) + if (new_scr_fieldx != SCR_FIELDX || + new_scr_fieldy != SCR_FIELDY || + new_sx != SX || + new_sy != SY || + vp_playfield->x != REAL_SX || + vp_playfield->y != REAL_SY || + vp_door_1->x != *door_1_x || + vp_door_1->y != *door_1_y || + vp_door_2->x != *door_2_x || + vp_door_2->y != *door_2_y) { - if (viewport.playfield.game.width != SCR_FIELDX || - viewport.playfield.game.height != SCR_FIELDY || - viewport.door_1.game.x != DX || - viewport.door_1.game.y != DY || - viewport.door_2.game.x != VX || - viewport.door_2.game.y != VY) - { - SCR_FIELDX = viewport.playfield.game.width; - SCR_FIELDY = viewport.playfield.game.height; - - DX = viewport.door_1.game.x; - DY = viewport.door_1.game.y; - VX = viewport.door_2.game.x; - VY = viewport.door_2.game.y; + SCR_FIELDX = new_scr_fieldx; + SCR_FIELDY = new_scr_fieldy; + SX = new_sx; + SY = new_sy; + REAL_SX = vp_playfield->x; + REAL_SY = vp_playfield->y; - InitGfxBuffers(); - } - } - else if (game_status == GAME_MODE_EDITOR) - { - if (viewport.playfield.editor.width != SCR_FIELDX || - viewport.playfield.editor.height != SCR_FIELDY || - viewport.door_1.editor.x != DX || - viewport.door_1.editor.y != DY || - viewport.door_2.editor.x != EX || - viewport.door_2.editor.y != EY) - { - SCR_FIELDX = viewport.playfield.editor.width; - SCR_FIELDY = viewport.playfield.editor.height; + *door_1_x = vp_door_1->x; + *door_1_y = vp_door_1->y; + *door_2_x = vp_door_2->x; + *door_2_y = vp_door_2->y; - DX = viewport.door_1.editor.x; - DY = viewport.door_1.editor.y; - EX = viewport.door_2.editor.x; - EY = viewport.door_2.editor.y; + InitGfxBuffers(); - InitGfxBuffers(); - } - } - else /* any menu screen */ - { - if (viewport.playfield.menu.width != SCR_FIELDX || - viewport.playfield.menu.height != SCR_FIELDY || - viewport.door_1.menu.x != DX || - viewport.door_1.menu.y != DY || - viewport.door_2.menu.x != VX || - viewport.door_2.menu.y != VY) + if (gfx_game_mode == GAME_MODE_MAIN) { - SCR_FIELDX = viewport.playfield.menu.width; - SCR_FIELDY = viewport.playfield.menu.height; - - DX = viewport.door_1.menu.x; - DY = viewport.door_1.menu.y; - VX = viewport.door_2.menu.x; - VY = viewport.door_2.menu.y; - - InitGfxBuffers(); InitGadgets(); InitToons(); }