fixed tile cursor drawing position
authorHolger Schemel <info@artsoft.org>
Mon, 4 Dec 2023 07:13:32 +0000 (08:13 +0100)
committerHolger Schemel <info@artsoft.org>
Mon, 4 Dec 2023 07:13:32 +0000 (08:13 +0100)
src/game_mm/export.h
src/game_mm/mm_tools.c
src/game_mm/mm_tools.h
src/libgame/sdl.c
src/libgame/system.c
src/libgame/system.h
src/tools.c
src/tools.h

index b555511bd80b03181cdba1abe55b8a3f015ece04..1d063969510dadd2c37382dd25e1875d9ef50b76 100644 (file)
@@ -238,7 +238,7 @@ void InitGameActions_MM(void);
 void GameActions_MM(struct MouseActionInfo);
 
 void DrawLaser_MM(void);
-void DrawTileCursor_MM(int, boolean);
+void DrawTileCursor_MM(int, int, boolean);
 
 boolean ClickElement(int, int, int);
 
index 6aeadd315726deeddbcd3f6776d78ab00be46d21..12ca83cee8e22041ee608e659ad1f106c5d1ac3a 100644 (file)
@@ -1057,7 +1057,8 @@ static void DrawTileCursor_Xsn(int draw_target)
   }
 }
 
-void DrawTileCursor_MM(int draw_target, boolean tile_cursor_active)
+void DrawTileCursor_MM(int draw_target, int drawing_stage,
+                      boolean tile_cursor_active)
 {
   if (program.headless)
     return;
@@ -1072,7 +1073,12 @@ void DrawTileCursor_MM(int draw_target, boolean tile_cursor_active)
   int width = tilesize;
   int height = tilesize;
 
-  DrawTileCursor_Xsn(draw_target);
+  if (!drawing_stage)
+  {
+    DrawTileCursor_Xsn(draw_target);
+
+    return;
+  }
 
   if (!tile_cursor.enabled ||
       !tile_cursor.active ||
index 5f116c900ed4f86a90cfa841413393d4c31526d7..28ba5c331eef1df5c9ec52750ffacfe205cffb54 100644 (file)
@@ -88,7 +88,7 @@ void DrawWallsExt_MM(int, int, int, int);
 void DrawWalls_MM(int, int, int);
 void DrawWallsAnimation_MM(int, int, int, int, int);
 void DrawMicroLevel_MM(int, int, boolean);
-void DrawTileCursor_MM(int, boolean);
+void DrawTileCursor_MM(int, int, boolean);
 
 boolean Request(char *, unsigned int);
 unsigned int OpenDoor(unsigned int);
index 068057657818719405bc43dacc8646b6b435013a..096eeb709fdcd7e78441774bfd5d15564af1fae9 100644 (file)
@@ -62,9 +62,9 @@ static void FinalizeScreen(int draw_target)
   if (gfx.draw_global_anim_function != NULL)
     gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_2);
 
-  // copy tile selection cursor to render target buffer, if defined (above all)
+  // copy tile selection cursor to render target buffer, if defined (part 1)
   if (gfx.draw_tile_cursor_function != NULL)
-    gfx.draw_tile_cursor_function(draw_target);
+    gfx.draw_tile_cursor_function(draw_target, TRUE);
 
   // copy envelope request to render target buffer, if needed (above all)
   if (gfx.draw_envelope_request_function != NULL)
@@ -73,6 +73,10 @@ static void FinalizeScreen(int draw_target)
   // copy global animations to render target buffer, if defined (mouse pointer)
   if (gfx.draw_global_anim_function != NULL)
     gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_3);
+
+  // copy tile selection cursor to render target buffer, if defined (part 2)
+  if (gfx.draw_tile_cursor_function != NULL)
+    gfx.draw_tile_cursor_function(draw_target, FALSE);
 }
 
 static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
index 2f21541d8e0419b5c938853082051c8075f550fe..2fad22274b84e09fc5bdac61421b860f511265ab 100644 (file)
@@ -287,7 +287,7 @@ void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int))
   gfx.draw_global_border_function = draw_global_border_function;
 }
 
-void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int))
+void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int))
 {
   gfx.draw_tile_cursor_function = draw_tile_cursor_function;
 }
index e5938dee7772abfe95220ff60f10e3f37781b76e..b41948012af532ee4155c464b7138f6b146f5f7a 100644 (file)
@@ -1245,7 +1245,7 @@ struct GfxInfo
   void (*draw_busy_anim_function)(boolean);
   void (*draw_global_anim_function)(int, int);
   void (*draw_global_border_function)(int);
-  void (*draw_tile_cursor_function)(int);
+  void (*draw_tile_cursor_function)(int, int);
   void (*draw_envelope_request_function)(int);
 
   int cursor_mode;
@@ -1980,7 +1980,7 @@ void InitGfxClipRegion(boolean, int, int, int, int);
 void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean));
 void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int));
 void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int));
-void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int));
+void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int));
 void InitGfxDrawEnvelopeRequestFunction(void (*draw_envelope_request_function)(int));
 void InitGfxCustomArtworkInfo(void);
 void InitGfxOtherSettings(void);
index 26532a75425c1453c8f5ee41de15f4e1448ea71b..ec647a63411c626022af38cbd83996b286125af7 100644 (file)
@@ -646,9 +646,11 @@ void DrawMaskedBorderToTarget(int draw_target)
   }
 }
 
-void DrawTileCursor(int draw_target)
+void DrawTileCursor(int draw_target, int drawing_stage)
 {
-  DrawTileCursor_MM(draw_target, game_status == GAME_MODE_PLAYING);
+  int tile_cursor_active = (game_status == GAME_MODE_PLAYING);
+
+  DrawTileCursor_MM(draw_target, drawing_stage, tile_cursor_active);
 }
 
 void BlitScreenToBitmapExt_RND(Bitmap *target_bitmap, int fx, int fy)
index 5901208c879a9a000e80811791c665c8da51d1fd..5f597f423eace0929c54fc8e5fda46884f033e3f 100644 (file)
@@ -83,7 +83,7 @@ void DrawMaskedBorder_DOOR_3(void);
 void DrawMaskedBorder_ALL(void);
 void DrawMaskedBorder(int);
 void DrawMaskedBorderToTarget(int);
-void DrawTileCursor(int);
+void DrawTileCursor(int, int);
 
 void SetDrawtoField(int);
 int GetDrawtoField(void);