Move reticle menu to macro

This commit is contained in:
Kp 2015-05-14 02:23:13 +00:00
parent e64e54f521
commit cb873563c8
2 changed files with 60 additions and 41 deletions

View file

@ -431,6 +431,7 @@ static inline void nm_set_item_slider(newmenu_item &ni, const char *text, unsign
nm_set_item_input(((DXX_NEWMENU_VARIABLE)[(OPT)]),(S)); nm_set_item_input(((DXX_NEWMENU_VARIABLE)[(OPT)]),(S));
#define DXX_READ_CHECK(S,OPT,V) \ #define DXX_READ_CHECK(S,OPT,V) \
(V) = (DXX_NEWMENU_VARIABLE)[(OPT)].value; (V) = (DXX_NEWMENU_VARIABLE)[(OPT)].value;
#define DXX_READ_RADIO(S,OPT,C,G) /* handled specially */
#define DXX_READ_NUMBER(S,OPT,V,MIN,MAX) \ #define DXX_READ_NUMBER(S,OPT,V,MIN,MAX) \
(V) = (DXX_NEWMENU_VARIABLE)[(OPT)].value; (V) = (DXX_NEWMENU_VARIABLE)[(OPT)].value;
#define DXX_READ_SLIDER(S,OPT,V,MIN,MAX) \ #define DXX_READ_SLIDER(S,OPT,V,MIN,MAX) \

View file

@ -1236,56 +1236,74 @@ void input_config()
static void reticle_config() static void reticle_config()
{ {
#ifdef OGL #ifdef OGL
newmenu_item m[18]; #define DXX_RETICLE_TYPE_OGL(VERB) \
DXX_##VERB##_RADIO("Classic Reboot", opt_reticle_classic_reboot, 0, optgrp_reticle)
#else #else
newmenu_item m[17]; #define DXX_RETICLE_TYPE_OGL(VERB)
#endif #endif
int nitems = 0, i, opt_ret_type, opt_ret_rgba, opt_ret_size; #define DXX_RETICLE_CONFIG_MENU(VERB) \
nm_set_item_text(m[nitems], "Reticle Type:"); nitems++; DXX_##VERB##_TEXT("Reticle Type:", opt_label_reticle_type) \
opt_ret_type = nitems; DXX_##VERB##_RADIO("Classic", opt_reticle_classic, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "Classic", 0, 0); nitems++; DXX_RETICLE_TYPE_OGL(VERB) \
#ifdef OGL DXX_##VERB##_RADIO("None", opt_reticle_none, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "Classic Reboot", 0, 0); nitems++; DXX_##VERB##_RADIO("X", opt_reticle_x, 0, optgrp_reticle) \
#endif DXX_##VERB##_RADIO("Dot", opt_reticle_dot, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "None", 0, 0); nitems++; DXX_##VERB##_RADIO("Circle", opt_reticle_circle, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "X", 0, 0); nitems++; DXX_##VERB##_RADIO("Cross V1", opt_reticle_cross1, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "Dot", 0, 0); nitems++; DXX_##VERB##_RADIO("Cross V2", opt_reticle_cross2, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "Circle", 0, 0); nitems++; DXX_##VERB##_RADIO("Angle", opt_reticle_angle, 0, optgrp_reticle) \
nm_set_item_radio(m[nitems], "Cross V1", 0, 0); nitems++; DXX_##VERB##_TEXT("", opt_label_blank_reticle_type) \
nm_set_item_radio(m[nitems], "Cross V2", 0, 0); nitems++; DXX_##VERB##_TEXT("Reticle Color:", opt_label_reticle_color) \
nm_set_item_radio(m[nitems], "Angle", 0, 0); nitems++; DXX_##VERB##_SCALE_SLIDER("Red", opt_reticle_color_red, PlayerCfg.ReticleRGBA[0], 0, 16, 2) \
nm_set_item_text(m[nitems], ""); nitems++; DXX_##VERB##_SCALE_SLIDER("Green", opt_reticle_color_green, PlayerCfg.ReticleRGBA[1], 0, 16, 2) \
nm_set_item_text(m[nitems], "Reticle Color:"); nitems++; DXX_##VERB##_SCALE_SLIDER("Blue", opt_reticle_color_blue, PlayerCfg.ReticleRGBA[2], 0, 16, 2) \
opt_ret_rgba = nitems; DXX_##VERB##_SCALE_SLIDER("Alpha", opt_reticle_color_alpha, PlayerCfg.ReticleRGBA[3], 0, 16, 2) \
nm_set_item_slider(m[nitems], "Red", (PlayerCfg.ReticleRGBA[0]/2), 0, 16); nitems++; DXX_##VERB##_TEXT("", opt_label_blank_reticle_color) \
nm_set_item_slider(m[nitems], "Green", (PlayerCfg.ReticleRGBA[1]/2), 0, 16); nitems++; DXX_##VERB##_SLIDER("Reticle Size:", opt_label_reticle_size, PlayerCfg.ReticleSize, 0, 4) \
nm_set_item_slider(m[nitems], "Blue", (PlayerCfg.ReticleRGBA[2]/2), 0, 16); nitems++;
nm_set_item_slider(m[nitems], "Alpha", (PlayerCfg.ReticleRGBA[3]/2), 0, 16); nitems++;
nm_set_item_text(m[nitems], ""); nitems++;
opt_ret_size = nitems;
nm_set_item_slider(m[nitems], "Reticle Size:", PlayerCfg.ReticleSize, 0, 4); nitems++;
i = PlayerCfg.ReticleType; class menu_items
{
public:
enum
{
optgrp_reticle,
};
enum
{
DXX_RETICLE_CONFIG_MENU(ENUM)
};
array<newmenu_item, DXX_RETICLE_CONFIG_MENU(COUNT)> m;
menu_items()
{
DXX_RETICLE_CONFIG_MENU(ADD);
}
void read()
{
DXX_RETICLE_CONFIG_MENU(READ);
}
};
#undef DXX_RETICLE_CONFIG_MENU
#undef DXX_RETICLE_TYPE_OGL
menu_items items;
auto i = PlayerCfg.ReticleType;
#ifndef OGL #ifndef OGL
if (i > 1) i--; if (i > 1) i--;
#endif #endif
m[opt_ret_type+i].value=1; items.m[items.opt_reticle_classic + i].value = 1;
newmenu_do1( NULL, "Reticle Options", nitems, m, unused_newmenu_subfunction, unused_newmenu_userdata, 1 ); newmenu_do1(nullptr, "Reticle Options", items.m.size(), items.m.data(), unused_newmenu_subfunction, unused_newmenu_userdata, 1);
#ifdef OGL for (uint_fast32_t i = items.opt_reticle_classic; i != items.opt_label_blank_reticle_type; ++i)
for (i = 0; i < 9; i++) if (items.m[i].value)
if (m[i+opt_ret_type].value) {
PlayerCfg.ReticleType = i; #ifndef OGL
#else if (i != items.opt_reticle_classic)
for (i = 0; i < 8; i++) ++i;
if (m[i+opt_ret_type].value)
PlayerCfg.ReticleType = i;
if (PlayerCfg.ReticleType > 1) PlayerCfg.ReticleType++;
#endif #endif
for (i = 0; i < 4; i++) PlayerCfg.ReticleType = i - items.opt_reticle_classic;
PlayerCfg.ReticleRGBA[i] = (m[i+opt_ret_rgba].value*2); break;
PlayerCfg.ReticleSize = m[opt_ret_size].value; }
items.read();
} }
#define DXX_GRAPHICS_MENU(VERB) \ #define DXX_GRAPHICS_MENU(VERB) \