added setting correct editor drawing elements (depending on game engine)
[rocksndiamonds.git] / src / editor.c
index e311541abdcf975346589cb53addf1787c0c24e6..7a854200d554445d7c48545c228b303777795d49 100644 (file)
 
 /* default value for element tile size in drawing area */
 #define DEFAULT_EDITOR_TILESIZE                MINI_TILESIZE
+#define DEFAULT_EDITOR_TILESIZE_MM     TILESIZE
 
 
 /*
@@ -3691,6 +3692,7 @@ static int level_xpos = -1, level_ypos = -1;
 
 /* actual tile size used to display playfield drawing area */
 static int ed_tilesize = DEFAULT_EDITOR_TILESIZE;
+static int ed_tilesize_default = DEFAULT_EDITOR_TILESIZE;
 
 #define IN_ED_FIELD(x,y)       IN_FIELD(x, y, ed_fieldx, ed_fieldy)
 
@@ -8278,17 +8280,57 @@ static int getMaxEdFieldY(boolean has_scrollbar)
 void InitZoomLevelSettings(int zoom_tilesize)
 {
   if (zoom_tilesize == -1)
-    zoom_tilesize = setup.auto_setup.editor_zoom_tilesize;
+  {
+    ed_tilesize = setup.auto_setup.editor_zoom_tilesize;
+    ed_tilesize_default = DEFAULT_EDITOR_TILESIZE;
+
+    if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
+    {
+      ed_tilesize = DEFAULT_EDITOR_TILESIZE_MM;
+      ed_tilesize_default = DEFAULT_EDITOR_TILESIZE_MM;
+    }
+  }
 
   // limit zoom tilesize by upper and lower bound
-  zoom_tilesize = MIN(MAX(MICRO_TILESIZE, zoom_tilesize), TILESIZE);
+  ed_tilesize = MIN(MAX(MICRO_TILESIZE, ed_tilesize), TILESIZE);
 
-  ed_tilesize = setup.auto_setup.editor_zoom_tilesize = zoom_tilesize;
+  // store zoom tilesize in auto setup file only if it was manually changed
+  if (zoom_tilesize != -1)
+    setup.auto_setup.editor_zoom_tilesize = ed_tilesize;
 
   MAX_ED_FIELDX = getMaxEdFieldX(FALSE);
   MAX_ED_FIELDY = getMaxEdFieldY(FALSE);
 }
 
+static void InitDrawingElements()
+{
+  static int game_engine_type_last = GAME_ENGINE_TYPE_UNKNOWN;
+
+  if (level.game_engine_type == game_engine_type_last)
+    return;
+
+  if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
+  {
+    new_element1 = EL_SP_CHIP_SINGLE;
+    new_element2 = EL_EMPTY;
+    new_element3 = EL_SP_BASE;
+  }
+  else if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
+  {
+    new_element1 = EL_MM_MIRROR_START;
+    new_element2 = EL_EMPTY;
+    new_element3 = EL_MM_WOODEN_WALL;
+  }
+  else
+  {
+    new_element1 = EL_WALL;
+    new_element2 = EL_EMPTY;
+    new_element3 = EL_SAND;
+  }
+
+  game_engine_type_last = level.game_engine_type;
+}
+
 static void InitLevelSetInfo()
 {
   snprintf(levelset_name,   MAX_LEVEL_NAME_LEN + 1,
@@ -8390,6 +8432,7 @@ void DrawLevelEd()
   ClearField();
 
   InitZoomLevelSettings(-1);
+  InitDrawingElements();
   InitLevelSetInfo();
 
 #if DEBUG
@@ -13263,7 +13306,7 @@ static void HandleControlButtons(struct GadgetInfo *gi)
     case GADGET_ID_ZOOM:
       // zoom level editor tile size in or out (or reset to default size)
       ed_tilesize = (button == 1 ? ed_tilesize * 2 :
-                    button == 2 ? DEFAULT_EDITOR_TILESIZE :
+                    button == 2 ? ed_tilesize_default :
                     button == 3 ? ed_tilesize / 2 : ed_tilesize);
 
       // limit zoom level by upper and lower bound