Mercurial > hg > forks > yadex
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)