rnd-20060621-1-src
authorHolger Schemel <info@artsoft.org>
Tue, 20 Jun 2006 23:53:10 +0000 (01:53 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:52:08 +0000 (10:52 +0200)
* fixed newly introduced bug with wrongly initializing clipboard element
* fixed bug with displaying visible/invisible level border in editor
* reorganized some elements in the level editor element list

ChangeLog
src/conftime.h
src/editor.c
src/files.c
src/tools.c

index 4c3a7ac1117694aed299d0175f157d4f6d1c470f..2c0bdd6d640e138850a0e70aa2e7e9f28312f2f0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-06-21
+       * fixed newly introduced bug with wrongly initializing clipboard element
+
+2006-06-19
+       * fixed bug with displaying visible/invisible level border in editor
+
+2006-06-14
+       * reorganized some elements in the level editor element list
+
 2006-06-06
        * fixed bug with displaying any player as "yellow" when moving into acid
        * fixed bug with displaying running player when player stopped at border
index 3af56902117f5c3a348b1ed64b9925bddf3d28dc..008c248412fba42891a0604eee4baec767a0ce5c 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-06-14 01:07]"
+#define COMPILE_DATE_STRING "[2006-06-21 01:26]"
index e3d3370ec4526fa94f8b48c6ce88548ca4c82ddd..791789dc8e7286d22a114e5fda549419a96d7cf2 100644 (file)
@@ -9261,11 +9261,20 @@ static void SetTextCursor(int unused_sx, int unused_sy, int sx, int sy,
     DrawAreaBorder(sx, sy, sx, sy);
 }
 
+static void CheckLevelBorderElement(boolean redraw_playfield)
+{
+  int last_border_element = BorderElement;
+
+  SetBorderElement();
+
+  if (redraw_playfield && BorderElement != last_border_element)
+    DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+}
+
 static void CopyLevelToUndoBuffer(int mode)
 {
   static boolean accumulated_undo = FALSE;
   boolean new_undo_buffer_position = TRUE;
-  int last_border_element;
   int x, y;
 
   switch (mode)
@@ -9298,10 +9307,7 @@ static void CopyLevelToUndoBuffer(int mode)
       UndoBuffer[undo_buffer_position][x][y] = Feld[x][y];
 
   /* check if drawing operation forces change of border style */
-  last_border_element = BorderElement;
-  SetBorderElement();
-  if (BorderElement != last_border_element)
-    DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+  CheckLevelBorderElement(TRUE);
 
   level.changed = TRUE;
 }
@@ -10187,7 +10193,12 @@ static void HandleControlButtons(struct GadgetInfo *gi)
       for (x = 0; x < lev_fieldx; x++)
        for (y = 0; y < lev_fieldy; y++)
          Feld[x][y] = UndoBuffer[undo_buffer_position][x][y];
-      DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos,level_ypos);
+
+      /* check if undo operation forces change of border style */
+      CheckLevelBorderElement(FALSE);
+
+      DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+
       break;
 
     case GADGET_ID_INFO:
index c53c86d88047d81eff27d8644a9d1b2e47b52b0c..c96105927edc77edafdf9bbe0e288f9648f61e3a 100644 (file)
@@ -1738,6 +1738,11 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
     int element = i;
     struct ElementInfo *ei = &element_info[element];
 
+    /* never initialize clipboard elements after the very first time */
+    /* (to be able to use clipboard elements between several levels) */
+    if (IS_CLIPBOARD_ELEMENT(element) && clipboard_elements_initialized)
+      continue;
+
     if (IS_ENVELOPE(element))
     {
       int envelope_nr = element - EL_ENVELOPE_1;
@@ -1760,11 +1765,6 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
     }
 #endif
 
-    /* never initialize clipboard elements after the very first time */
-    /* (to be able to use clipboard elements between several levels) */
-    if (IS_CLIPBOARD_ELEMENT(element) && clipboard_elements_initialized)
-      continue;
-
     setElementChangePages(ei, 1);
     setElementChangeInfoToDefaults(ei->change);
 
index 8990e7fd28afb210c3697fc305f39491f9fcd0ff..3a2b962a3469435f1d8f00d6acf497f5be894d87 100644 (file)
@@ -1960,8 +1960,17 @@ void DrawPlayer(struct PlayerInfo *player)
             last_element == EL_EM_DYNAMITE_ACTIVE ||
             last_element == EL_SP_DISK_RED_ACTIVE)
       DrawDynamite(last_jx, last_jy);
+#if 0
+    /* !!! this is not enough to prevent flickering of players which are
+       moving next to each others without a free tile between them -- this
+       can only be solved by drawing all players layer by layer (first the
+       background, then the foreground etc.) !!! => TODO */
+    else if (!IS_PLAYER(last_jx, last_jy))
+      DrawLevelField(last_jx, last_jy);
+#else
     else
       DrawLevelField(last_jx, last_jy);
+#endif
 
     if (player->is_pushing && IN_SCR_FIELD(SCREENX(next_jx), SCREENY(next_jy)))
       DrawLevelElement(next_jx, next_jy, EL_EMPTY);