fixed rotating MM game elements in editor with pressed Shift key
authorHolger Schemel <info@artsoft.org>
Fri, 24 Feb 2023 19:51:53 +0000 (20:51 +0100)
committerHolger Schemel <info@artsoft.org>
Fri, 24 Feb 2023 20:01:17 +0000 (21:01 +0100)
When holding the Shift key pressed, MM style rotatable game elements
can be rotated on the playfield (instead of drawing with the element
selected for this mouse button). However, if the drawing element is
an MM style wall, this element is placed on the playfield instead of
rotating the existing element on the playfield.

This usually happened when editing a level using the MM game engine
and trying to rotate an existing element to the right using the right
mouse button, as the default drawing element for the right mouse
button is the wooden MM style wall.

This change fixes this problem, so all three mouse button can now
be used to rotate elements on the playfield, regardless of current
drawing element.

src/editor.c

index 10ff5a7f8463771253829dbd90443f7f2d468010..644294a4e7122333b1c9d136a5aa606e27ba4064 100644 (file)
@@ -11136,7 +11136,7 @@ static void MergeAndCloseNeighbourElements(int x1, int y1, int *element1,
   SetElementSimple(x2, y2, *element2, change_level);
 }
 
-static void SetElementIntelliDraw(int x, int y, int new_element,
+static void SetElementIntelliDraw(int x, int y, int dx, int dy, int new_element,
                                  boolean change_level, int button)
 {
   struct XY *xy = xy_directions;
@@ -11908,7 +11908,10 @@ static void SetElementIntelliDraw(int x, int y, int new_element,
     }
   }
 
-  SetElementSimple(x, y, new_element, change_level);
+  if (IS_MM_WALL_EDITOR(new_element))
+    SetElementSimpleExt(x, y, dx, dy, new_element, change_level);
+  else
+    SetElementSimple(x, y, new_element, change_level);
 
   last_x = x;
   last_y = y;
@@ -11922,7 +11925,7 @@ static void ResetIntelliDraw(void)
     for (y = 0; y < lev_fieldy; y++)
       IntelliDrawBuffer[x][y] = Tile[x][y];
 
-  SetElementIntelliDraw(-1, -1, EL_UNDEFINED, FALSE, -1);
+  SetElementIntelliDraw(-1, -1, -1, -1, EL_UNDEFINED, FALSE, -1);
 }
 
 static boolean draw_mode_hires = FALSE;
@@ -11964,8 +11967,8 @@ static void SetElementExt(int x, int y, int dx, int dy, int element,
 {
   if (element < 0)
     SetElementSimple(x, y, Tile[x][y], change_level);
-  else if (GetKeyModState() & KMOD_Shift && !IS_MM_WALL_EDITOR(element))
-    SetElementIntelliDraw(x, y, element, change_level, button);
+  else if (GetKeyModState() & KMOD_Shift)
+    SetElementIntelliDraw(x, y, dx, dy, element, change_level, button);
   else
     SetElementSimpleExt(x, y, dx, dy, element, change_level);
 }