removed using cross-fading buffer (not needed anymore after recent changes)
[rocksndiamonds.git] / src / tools.c
index 972e5a24eab5b0e4ea6551fadf86276a4cc627fd..ec059e12146082ca1613378e6e11ce18e1491d92 100644 (file)
@@ -234,7 +234,7 @@ void DumpTile(int x, int y)
 
 void SetDrawtoField(int mode)
 {
-  if (mode == DRAW_FIELDBUFFER)
+  if (mode == DRAW_TO_FIELDBUFFER)
   {
     FX = 2 * TILEX_VAR;
     FY = 2 * TILEY_VAR;
@@ -245,7 +245,7 @@ void SetDrawtoField(int mode)
 
     drawto_field = fieldbuffer;
   }
-  else /* DRAW_BACKBUFFER */
+  else /* DRAW_TO_BACKBUFFER */
   {
     FX = SX;
     FY = SY;
@@ -294,7 +294,7 @@ static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height,
   if (x == -1 && y == -1)
     return;
 
-  if (draw_target == DRAW_BORDER_TO_SCREEN)
+  if (draw_target == DRAW_TO_SCREEN)
     BlitToScreenMasked(src_bitmap, x, y, width, height, x, y);
   else
     BlitBitmapMasked(src_bitmap, dst_bitmap, x, y, width, height, x, y);
@@ -312,7 +312,7 @@ static void DrawMaskedBorderExt_FIELD(int draw_target)
 static void DrawMaskedBorderExt_DOOR_1(int draw_target)
 {
   // when drawing to backbuffer, never draw border over open doors
-  if (draw_target == DRAW_BORDER_TO_BACKBUFFER &&
+  if (draw_target == DRAW_TO_BACKBUFFER &&
       (GetDoorState() & DOOR_OPEN_1))
     return;
 
@@ -325,7 +325,7 @@ static void DrawMaskedBorderExt_DOOR_1(int draw_target)
 static void DrawMaskedBorderExt_DOOR_2(int draw_target)
 {
   // when drawing to backbuffer, never draw border over open doors
-  if (draw_target == DRAW_BORDER_TO_BACKBUFFER &&
+  if (draw_target == DRAW_TO_BACKBUFFER &&
       (GetDoorState() & DOOR_OPEN_2))
     return;
 
@@ -371,18 +371,18 @@ static void DrawMaskedBorderExt(int redraw_mask, int draw_target)
 
 void DrawMaskedBorder_FIELD()
 {
-  DrawMaskedBorderExt_FIELD(DRAW_BORDER_TO_BACKBUFFER);
+  DrawMaskedBorderExt_FIELD(DRAW_TO_BACKBUFFER);
 }
 
 void DrawMaskedBorder(int redraw_mask)
 {
-  DrawMaskedBorderExt(redraw_mask, DRAW_BORDER_TO_BACKBUFFER);
+  DrawMaskedBorderExt(redraw_mask, DRAW_TO_BACKBUFFER);
 }
 
 void DrawMaskedBorderToTarget(int draw_target)
 {
-  if (draw_target == DRAW_BORDER_TO_BACKBUFFER ||
-      draw_target == DRAW_BORDER_TO_SCREEN)
+  if (draw_target == DRAW_TO_BACKBUFFER ||
+      draw_target == DRAW_TO_SCREEN)
   {
     DrawMaskedBorderExt(REDRAW_ALL, draw_target);
   }
@@ -390,12 +390,12 @@ void DrawMaskedBorderToTarget(int draw_target)
   {
     int last_border_status = global.border_status;
 
-    if (draw_target == DRAW_BORDER_TO_FADE_SOURCE)
+    if (draw_target == DRAW_TO_FADE_SOURCE)
     {
       global.border_status = gfx.fade_border_source_status;
       gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_source;
     }
-    else if (draw_target == DRAW_BORDER_TO_FADE_TARGET)
+    else if (draw_target == DRAW_TO_FADE_TARGET)
     {
       global.border_status = gfx.fade_border_target_status;
       gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_target;
@@ -598,26 +598,10 @@ void BackToFront_WithFrameDelay(unsigned int frame_delay_value)
   SetVideoFrameDelay(frame_delay_value_old);
 }
 
-static void FadeCrossSaveBackbuffer()
-{
-  BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
-}
-
-static void FadeCrossRestoreBackbuffer()
-{
-  int redraw_mask_last = redraw_mask;
-
-  BlitBitmap(bitmap_db_cross, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
-
-  // do not change redraw mask when restoring backbuffer after cross-fading
-  redraw_mask = redraw_mask_last;
-}
-
 static void FadeExt(int fade_mask, int fade_mode, int fade_type)
 {
   static int fade_type_skip = FADE_TYPE_NONE;
   void (*draw_border_function)(void) = NULL;
-  Bitmap *bitmap = (fade_mode & FADE_TYPE_TRANSFORM ? bitmap_db_cross : NULL);
   int x, y, width, height;
   int fade_delay, post_delay;
 
@@ -632,18 +616,8 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
       return;
     }
 
-#if 1
-    FadeCrossSaveBackbuffer();
-#endif
-
     if (fading.fade_mode & FADE_TYPE_TRANSFORM)
-    {
-#if 0
-      FadeCrossSaveBackbuffer();
-#endif
-
       return;
-    }
   }
 
   redraw_mask |= fade_mask;
@@ -706,17 +680,22 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
     return;
   }
 
-  FadeRectangle(bitmap, x, y, width, height, fade_mode, fade_delay, post_delay,
+  FadeRectangle(x, y, width, height, fade_mode, fade_delay, post_delay,
                draw_border_function);
 
-  if (fade_type == FADE_TYPE_FADE_OUT)
-    FadeCrossRestoreBackbuffer();
-
   redraw_mask &= ~fade_mask;
 }
 
 static void SetScreenStates_BeforeFadingIn()
 {
+  // temporarily set screen mode for animations to screen after fading in
+  global.anim_status = global.anim_status_next;
+
+  // store backbuffer with all animations that will be started after fading in
+  PrepareFadeBitmap(DRAW_TO_FADE_TARGET);
+
+  // set screen mode for animations back to fading
+  global.anim_status = GAME_MODE_PSEUDO_FADING;
 }
 
 static void SetScreenStates_AfterFadingIn()
@@ -736,7 +715,11 @@ static void SetScreenStates_BeforeFadingOut()
   // store new target screen (to use correct masked border for fading)
   gfx.fade_border_target_status = game_status;
 
+  // set screen mode for animations to fading
   global.anim_status = GAME_MODE_PSEUDO_FADING;
+
+  // store backbuffer with all animations that will be stopped for fading out
+  PrepareFadeBitmap(DRAW_TO_FADE_SOURCE);
 }
 
 static void SetScreenStates_AfterFadingOut()
@@ -1103,11 +1086,11 @@ void ClearField()
   if (game_status == GAME_MODE_PLAYING)
   {
     ClearRectangle(fieldbuffer, 0, 0, FXSIZE, FYSIZE);
-    SetDrawtoField(DRAW_FIELDBUFFER);
+    SetDrawtoField(DRAW_TO_FIELDBUFFER);
   }
   else
   {
-    SetDrawtoField(DRAW_BACKBUFFER);
+    SetDrawtoField(DRAW_TO_BACKBUFFER);
   }
 }
 
@@ -2300,11 +2283,11 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
     int sy = SY + (SYSIZE - ysize * font_height) / 2;
     int xx, yy;
 
-    SetDrawtoField(DRAW_FIELDBUFFER);
+    SetDrawtoField(DRAW_TO_FIELDBUFFER);
 
     BlitScreenToBitmap(backbuffer);
 
-    SetDrawtoField(DRAW_BACKBUFFER);
+    SetDrawtoField(DRAW_TO_BACKBUFFER);
 
     for (yy = 0; yy < ysize; yy++)
       for (xx = 0; xx < xsize; xx++)
@@ -2361,7 +2344,7 @@ void ShowEnvelope(int envelope_nr)
 
   game.envelope_active = FALSE;
 
-  SetDrawtoField(DRAW_FIELDBUFFER);
+  SetDrawtoField(DRAW_TO_FIELDBUFFER);
 
   redraw_mask |= REDRAW_FIELD;
   BackToFront();
@@ -2620,7 +2603,7 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action)
   if (game_status == GAME_MODE_PLAYING)
     BlitScreenToBitmap(backbuffer);
 
-  SetDrawtoField(DRAW_BACKBUFFER);
+  SetDrawtoField(DRAW_TO_BACKBUFFER);
 
   // SetDrawBackgroundMask(REDRAW_NONE);
 
@@ -2684,7 +2667,7 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action)
   if (action == ACTION_CLOSING &&
       game_status == GAME_MODE_PLAYING &&
       level.game_engine_type == GAME_ENGINE_TYPE_RND)
-    SetDrawtoField(DRAW_FIELDBUFFER);
+    SetDrawtoField(DRAW_TO_FIELDBUFFER);
 }
 
 void DrawPreviewElement(int dst_x, int dst_y, int element, int tilesize)
@@ -3569,11 +3552,11 @@ static int RequestHandleEvents(unsigned int req_state)
   {
     if (level_solved)
     {
-      SetDrawtoField(DRAW_FIELDBUFFER);
+      SetDrawtoField(DRAW_TO_FIELDBUFFER);
 
       HandleGameActions();
 
-      SetDrawtoField(DRAW_BACKBUFFER);
+      SetDrawtoField(DRAW_TO_BACKBUFFER);
 
       if (global.use_envelope_request)
       {