rnd-20100419-1-src
[rocksndiamonds.git] / src / tools.c
index 30df9f7cafa12b121a177f0cbd1221e6bc8e7280..8461537a9329e91bfa9d0c327380493d9be8af91 100644 (file)
@@ -8088,6 +8088,28 @@ 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 0
+  /* !!! TEST ONLY !!! */
+  // InitGfxBuffers();
+  return;
+#endif
+
   if (viewport.window.width  != WIN_XSIZE ||
       viewport.window.height != WIN_YSIZE)
   {
@@ -8105,66 +8127,39 @@ 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;
+    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;
 
-      DX = viewport.door_1.game.x;
-      DY = viewport.door_1.game.y;
-      VX = viewport.door_2.game.x;
-      VY = viewport.door_2.game.y;
+    *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;
 
-      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;
-
-      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();
     }
   }
+
+#if 0
+  printf("::: %d, %d  /  %d, %d [%d]\n", VX, VY, EX, EY, game_status);
+#endif
 }