Move kc_drawquestion to dcx

This commit is contained in:
Kp 2020-08-28 00:18:45 +00:00
parent 0f2c1cdd45
commit 96c007687c

View file

@ -112,6 +112,11 @@ fix Cruise_speed=0;
const std::array<uint8_t, MAX_DXX_REBIRTH_CONTROLS> DefaultKeySettingsRebirth{{ 0x2,0xff,0xff,0x3,0xff,0xff,0x4,0xff,0xff,0x5,0xff,0xff,0x6,0xff,0xff,0x7,0xff,0xff,0x8,0xff,0xff,0x9,0xff,0xff,0xa,0xff,0xff,0xb,0xff,0xff }};
void kconfig_begin_loop(control_info &Controls)
{
Controls.pitch_time = Controls.vertical_thrust_time = Controls.heading_time = Controls.sideways_thrust_time = Controls.bank_time = Controls.forward_thrust_time = 0;
}
namespace {
struct kc_mitem {
@ -119,21 +124,6 @@ struct kc_mitem {
uint8_t value; // what key,button,etc
};
}
void kconfig_begin_loop(control_info &Controls)
{
Controls.pitch_time = Controls.vertical_thrust_time = Controls.heading_time = Controls.sideways_thrust_time = Controls.bank_time = Controls.forward_thrust_time = 0;
}
}
namespace dsx {
control_info Controls;
namespace {
enum kc_type : uint8_t
{
BT_KEY = 0,
@ -154,6 +144,32 @@ enum kc_state : uint8_t
STATE_BIT5 = 16,
};
static void kc_drawquestion(grs_canvas &canvas, const grs_font &cv_font, uint8_t &menu_fade_index, const short item_xinput, const short item_y, const int8_t item_w2, const color_palette_index color)
{
if (++ menu_fade_index > 63)
menu_fade_index = 0;
int w, h;
gr_get_string_size(cv_font, "?", &w, &h, nullptr);
const auto &&fspacx = FSPACX();
const auto &&fspacy = FSPACY();
const auto &&fspacx_item_xinput = fspacx(item_xinput);
const auto &&fspacy_item_y = fspacy(item_y);
gr_urect(canvas, fspacx_item_xinput, fspacy(item_y - 1), fspacx(item_xinput + item_w2), fspacy_item_y + h, color);
gr_set_fontcolor(canvas, BM_XRGB(28, 28, 28), -1);
const auto x = fspacx_item_xinput + ((fspacx(item_w2) - w) / 2);
gr_string(canvas, cv_font, x, fspacy_item_y, "?", w, h);
}
}
}
namespace dsx {
control_info Controls;
namespace {
#define kc_item kc_item
struct kc_item
{
@ -268,9 +284,6 @@ static void kc_change_joyaxis( kc_menu &menu,const d_event &event, kc_mitem& mit
#endif
static void kc_change_mouseaxis( kc_menu &menu,const d_event &event, kc_mitem& mitem );
static void kc_change_invert( kc_menu *menu, kc_mitem * item );
namespace dsx {
static void kc_drawquestion(grs_canvas &, const grs_font &, kc_menu *menu, const kc_item *item);
}
static const char *get_item_text(const kc_item &item, const kc_mitem &mitem, char (&buf)[10])
{
@ -490,7 +503,15 @@ static void kconfig_draw(kc_menu *menu)
}
if (s)
gr_string(canvas, game_font, 0x8000, fspacy(INFO_Y), s);
kc_drawquestion(canvas, game_font, menu, &menu->items[menu->citem]);
auto &item = menu->items[menu->citem];
auto &menu_fade_index = menu->q_fade_i;
const auto fade_element = fades[menu_fade_index];
#if defined(DXX_BUILD_DESCENT_I)
const auto color = gr_fade_table[fade_element][BM_XRGB(21, 0, 24)];
#elif defined(DXX_BUILD_DESCENT_II)
const auto color = BM_XRGB(21 * fade_element / 31, 0, 24 * fade_element / 31);
#endif
kc_drawquestion(canvas, game_font, menu_fade_index, item.xinput, item.y, item.w2, color);
}
canvas.cv_font = save_font;
gr_set_current_canvas( save_canvas );
@ -841,35 +862,6 @@ static void kc_drawinput(grs_canvas &canvas, const grs_font &cv_font, const kc_i
}
}
namespace dsx {
static void kc_drawquestion(grs_canvas &canvas, const grs_font &cv_font, kc_menu *const menu, const kc_item *const item)
{
#if defined(DXX_BUILD_DESCENT_I)
const auto color = gr_fade_table[fades[menu->q_fade_i]][BM_XRGB(21,0,24)];
#elif defined(DXX_BUILD_DESCENT_II)
const auto color = BM_XRGB(21*fades[menu->q_fade_i]/31,0,24*fades[menu->q_fade_i]/31);
#endif
menu->q_fade_i++;
if (menu->q_fade_i>63) menu->q_fade_i=0;
int w, h;
gr_get_string_size(cv_font, "?", &w, &h, nullptr);
const auto &&fspacx = FSPACX();
const auto &&fspacy = FSPACY();
const auto &&fspacx_item_xinput = fspacx(item->xinput);
const auto &&fspacy_item_y = fspacy(item->y);
gr_urect(canvas, fspacx_item_xinput, fspacy(item->y - 1), fspacx(item->xinput + item->w2), fspacy_item_y + h, color);
gr_set_fontcolor(canvas, BM_XRGB(28, 28, 28), -1);
const auto x = fspacx_item_xinput + ((fspacx(item->w2) - w) / 2);
gr_string(canvas, cv_font, x, fspacy_item_y, "?", w, h);
}
}
static void kc_set_exclusive_binding(kc_menu &menu, kc_mitem &mitem, unsigned type, unsigned value)
{
for (unsigned i=0; i < menu.nitems; i++ )