fixed moving tile selection cursor
authorHolger Schemel <info@artsoft.org>
Fri, 15 Dec 2017 07:19:27 +0000 (08:19 +0100)
committerHolger Schemel <info@artsoft.org>
Fri, 23 Mar 2018 22:21:17 +0000 (23:21 +0100)
src/events.c
src/libgame/system.c
src/libgame/system.h
src/tools.c

index 846527641a28506f152f75fd380bc3ff52bc4252..5dabff98e944b25fb815cf470f6e58c58b1011b2 100644 (file)
@@ -2187,7 +2187,7 @@ static void HandleTileCursor(int dx, int dy, int button)
                         (dx < 0 ? MB_LEFTBUTTON :
                          dx > 0 ? MB_RIGHTBUTTON : MB_RELEASED));
   }
-  else
+  else if (!tile_cursor.moving)
   {
     int old_xpos = tile_cursor.xpos;
     int old_ypos = tile_cursor.ypos;
index dea7258d009e5cef1816ed53fd17742a5e98035b..a35f91d6827b3ffd7d6a772614519c31c350c8d4 100644 (file)
@@ -310,6 +310,7 @@ void InitTileCursorInfo()
 {
   tile_cursor.enabled = FALSE;
   tile_cursor.active = FALSE;
+  tile_cursor.moving = FALSE;
 
   tile_cursor.xpos = 0;
   tile_cursor.ypos = 0;
@@ -349,6 +350,8 @@ void SetTileCursorTargetXY(int x, int y)
   tile_cursor.ypos = y;
   tile_cursor.target_x = gfx.sx + x * gfx.game_tile_size;
   tile_cursor.target_y = gfx.sy + y * gfx.game_tile_size;
+
+  tile_cursor.moving = TRUE;
 }
 
 void SetTileCursorXY(int x, int y)
@@ -359,6 +362,8 @@ void SetTileCursorXY(int x, int y)
 
   tile_cursor.x = tile_cursor.target_x;
   tile_cursor.y = tile_cursor.target_y;
+
+  tile_cursor.moving = FALSE;
 }
 
 void SetOverlayEnabled(boolean enabled)
index a2226a78d8228e9b5229a43618122060eb734a7b..578d060ee9402591ec8fdeba37f1a972e97d54dd 100644 (file)
@@ -958,6 +958,7 @@ struct TileCursorInfo
 {
   boolean enabled;             /* tile cursor generally enabled or disabled */
   boolean active;              /* tile cursor activated (depending on game) */
+  boolean moving;              /* tile cursor moving to target position */
 
   int xpos, ypos;              /* tile cursor level playfield position */
   int x, y;                    /* tile cursor current screen position */
index 3c301a3912f9b03461885a1102dfafe0807dee71..d11d99d2effc0b5579c2206374facfdfda83a0d8 100644 (file)
@@ -654,10 +654,9 @@ void DrawTileCursor(int draw_target)
       !tile_cursor.active)
     return;
 
-  if (tile_cursor.x != tile_cursor.target_x ||
-      tile_cursor.y != tile_cursor.target_y)
+  if (tile_cursor.moving)
   {
-    int step = TILESIZE_VAR / (GADGET_FRAME_DELAY / video.frame_delay_value);
+    int step = TILESIZE_VAR / 4;
     int dx = tile_cursor.target_x - tile_cursor.x;
     int dy = tile_cursor.target_y - tile_cursor.y;
 
@@ -670,6 +669,10 @@ void DrawTileCursor(int draw_target)
       tile_cursor.y = tile_cursor.target_y;
     else
       tile_cursor.y += SIGN(dy) * step;
+
+    if (tile_cursor.x == tile_cursor.target_x &&
+       tile_cursor.y == tile_cursor.target_y)
+      tile_cursor.moving = FALSE;
   }
 
   dst_x = tile_cursor.x;