diff src/editobj.cc @ 66:794b7bb40d7f

Initial work on cleaning up and improving the texture alignment functionality.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 26 Sep 2011 10:16:55 +0300
parents 2537585c2b93
children 2f1ecc1c5f72
line wrap: on
line diff
--- a/src/editobj.cc	Mon Sep 26 09:47:41 2011 +0300
+++ b/src/editobj.cc	Mon Sep 26 10:16:55 2011 +0300
@@ -655,12 +655,99 @@
     }
 }
 
+static void AlignTexturesMenu(int xc, int yc, int mode, SelPtr *list)
+{
+    int opt_sdef;
+    bool opt_offset = false, opt_check = false;
+
+    switch (vDisplayMenu(xc, yc,
+    mode ? "Aligning textures (Y offset) :" : "Aligning textures (X offset) :",
+
+    " Sidedef 1, Check for identical textures.     ", YK_, 0,
+    " Sidedef 1, As above, but with initial offset.", YK_, 0,
+    " Sidedef 1, No texture checking.              ", YK_, 0,
+    " Sidedef 1, As above, but with initial offset.", YK_, 0,
+    " Sidedef 2, Check for identical textures.     ", YK_, 0,
+    " Sidedef 2, As above, but with initial offset.", YK_, 0,
+    " Sidedef 2, No texture checking.              ", YK_, 0,
+    " Sidedef 2, As above, but with initial offset.", YK_, 0,
+    NULL))
+    {
+    case 1:                        /* Sidedef 1 with checking for same textures   */
+        opt_sdef = 1;
+        opt_check = true;
+        opt_offset = false;
+        break;
+
+    case 2:                        /* Sidedef 1 as above, but with inital offset  */
+        opt_sdef = 1;
+        opt_check = true;
+        opt_offset = true;
+        break;
+
+    case 3:                        /* Sidedef 1 regardless of same textures       */
+        opt_sdef = 1;
+        opt_check = false;
+        opt_offset = false;
+        break;
+
+    case 4:                        /* Sidedef 1 as above, but with inital offset  */
+        opt_sdef = 1;
+        opt_check = false;
+        opt_offset = true;
+        break;
+
+    case 5:                        /* Sidedef 2 with checking for same textures   */
+        opt_sdef = 2;
+        opt_check = true;
+        opt_offset = false;
+        break;
+
+    case 6:                        /* Sidedef 2 as above, but with initial offset */
+        opt_sdef = 2;
+        opt_check = true;
+        opt_offset = true;
+        break;
+
+    case 7:                        /* Sidedef 2 regardless of same textures       */
+        opt_sdef = 2;
+        opt_check = false;
+        opt_offset = false;
+        break;
+
+    case 8:                        /* Sidedef 2 as above, but with initial offset */
+        opt_sdef = 2;
+        opt_check = false;
+        opt_offset = true;
+        break;
+
+    default:
+        return;
+    }
+
+    /* Select all sidedefs */
+    SelPtr sdlist = NULL, cur;
+    for (cur = *list; cur; cur = cur->next)
+    {
+        if (opt_sdef == 1 && LineDefs[cur->objnum].sidedef1 >= 0)
+            SelectObject(&sdlist, LineDefs[cur->objnum].sidedef1);
+
+        if (opt_sdef == 2 && LineDefs[cur->objnum].sidedef2 >= 0)
+            SelectObject(&sdlist, LineDefs[cur->objnum].sidedef2);
+    }
+
+    if (mode == 0)
+        /* Align the textures along the X axis (width) */
+        AlignTexturesX(&sdlist, opt_sdef, opt_check, opt_offset, -1);
+    else
+        /* Align the textures along the Y axis (height) */
+        AlignTexturesY(&sdlist, opt_sdef, opt_check);
+}
 
 
 /*
-   menu of miscellaneous operations
-*/
-
+ * Menu of miscellaneous operations
+ */
 void MiscOperations(int objtype, SelPtr * list, int val)        /* SWAP! */
 {
     char msg[80];
@@ -873,19 +960,7 @@
         // Linedef ->  Align textures vertically
         if (objtype == OBJ_LINEDEFS)
         {
-            SelPtr sdlist, cur;
-
-            /* select all sidedefs */
-            sdlist = 0;
-            for (cur = *list; cur; cur = cur->next)
-            {
-                if (LineDefs[cur->objnum].sidedef1 >= 0)
-                    SelectObject(&sdlist, LineDefs[cur->objnum].sidedef1);
-                if (LineDefs[cur->objnum].sidedef2 >= 0)
-                    SelectObject(&sdlist, LineDefs[cur->objnum].sidedef2);
-            }
-            /* align the textures along the Y axis (height) */
-            AlignTexturesY(&sdlist);
+            AlignTexturesMenu(250, 110, 1, list);
         }
         // Sector -> Brighten or darken
         else if (objtype == OBJ_SECTORS)
@@ -898,19 +973,7 @@
         // Linedef -> Align texture horizontally
         if (objtype == OBJ_LINEDEFS)
         {
-            SelPtr sdlist, cur;
-
-            /* select all sidedefs */
-            sdlist = 0;
-            for (cur = *list; cur; cur = cur->next)
-            {
-                if (LineDefs[cur->objnum].sidedef1 >= 0)
-                    SelectObject(&sdlist, LineDefs[cur->objnum].sidedef1);
-                if (LineDefs[cur->objnum].sidedef2 >= 0)
-                    SelectObject(&sdlist, LineDefs[cur->objnum].sidedef2);
-            }
-            /* align the textures along the X axis (width) */
-            AlignTexturesX(&sdlist);
+            AlignTexturesMenu(250, 110, 0, list);
         }
         // Sector -> Unlink room
         else if (objtype == OBJ_SECTORS)