fteqw/quakec/menusys/menu/options_keys.qc

114 lines
3.7 KiB
Plaintext

const static struct
{
string name;
string cmd;
} binds[] =
{
{_("Forwards"), "+forward"},
{_("Back"), "+back"},
{_("Move Left"), "+moveleft"},
{_("Move Right"), "+moveright"},
{_("Turn Left"), "+left"},
{_("Turn Right"), "+right"},
{_("Look Up"), "+lookup"},
{_("Look Down"), "+lookdown"},
{_("Swim Up"), "+moveup"},
{_("Swim Down"), "+movedown"},
{_("Center view"), "centerview"},
{_("Jump"), "+jump"},
{_("Attack"), "+attack"},
{_("Next Weapon"), "impulse 10"},
{_("Prev Weapon"), "impulse 12"},
{_("Scores"), "+showscores"},
{_("Server Chat"), "messagemode"},
{_("Team Chat"), "messagemode2"},
{_("Voice Chat"), "+voip"},
// {_("Mouse Look"), "+mlook"},
{_("Keyboard Look"), "+klook"},
{_("Strafe"), "+strafe"},
{_("Run"), "+speed"},
{0, 0},
{_("Axe"), "impulse 1"},
{_("Shotgun"), "impulse 2"},
{_("Super Shotgun"), "impulse 3"},
{_("Nailgun"), "impulse 4"},
{_("Super Nailgun"), "impulse 5"},
{_("Grenade Launcher"), "impulse 6"},
{_("Rocket Launcher"), "impulse 7"},
{_("Lightning Gun"), "impulse 8"},
// {_("Railgun"), "impulse 9"},
{0, 0},
{_("Ready Up"), "ready"},
{_("Break Match"), "break"},
};
void(mitem_desktop desktop) M_Options_Keys =
{
float i;
float h;
//create the menu, give it focus, and make sure its displayed over everything else.
mitem_exmenu m = spawn(mitem_exmenu, item_text:_("Key Options"), item_flags:IF_SELECTABLE, item_command:"m_options");
desktop.add(m, RS_X_MIN_PARENT_MIN|RS_Y_MIN_PARENT_MIN | RS_X_MAX_PARENT_MAX|RS_Y_MAX_PARENT_MAX, '0 0', '0 0');
desktop.item_focuschange(m, IF_KFOCUSED);
m.totop();
//figure out the size of the stuff
// h = sizeof(binds) / sizeof(binds[0]);
// h *= 8;
h = 200;
h *= 0.5; //and halve it
//draw title art above the options
mitem_pic banner = spawn(mitem_pic, item_text:"gfx/ttl_cstm.lmp", item_size_y:24, item_flags:IF_CENTERALIGN);
m.add(banner, RS_X_MIN_PARENT_MID|RS_Y_MIN_PARENT_MID | RS_X_MAX_PARENT_MID|RS_Y_MAX_PARENT_MID, [banner.item_size_x*-0.5, -h-32], [banner.item_size_x*0.5, -h-8]);
//spawn a container frame for the actual options. this provides a scrollbar if we have too many items.
mitem_frame fr = spawn(mitem_frame, item_flags: IF_SELECTABLE, frame_hasscroll:TRUE);
m.add(fr, RS_X_MIN_PARENT_MID|RS_Y_MIN_PARENT_MID | RS_X_MAX_OWN_MIN|RS_Y_MAX_OWN_MIN, [-140, -h], [280, h*2]);
float f = fopen("bindlist.lst", FILE_READ);
if (f >= 0)
{
//throw a load of bind options onto it by reading from the array.
for (i = 0; ; )
{
string line = fgets(f);
if not (line)
break; //eof
float args = tokenize(line);
if (!args)
continue; //blank line
string c = argv(0);
string n = argv(1);
string t = argv(2);
if (c == "-") //command only
{
if (n != "")
{
mitem it = menuitemtext_spawn(n, "", 8);
it.item_flags &= ~IF_SELECTABLE;
fr.add(it, RS_X_MIN_PARENT_MID|RS_Y_MIN_PARENT_MIN | RS_X_MAX_OWN_MIN|RS_Y_MAX_OWN_MIN, [-it.item_size_x/2, i], it.item_size);
}
}
else
fr.add(menuitembind_spawn(n, c, '280 8'), RS_X_MIN_PARENT_MIN|RS_Y_MIN_PARENT_MIN | RS_X_MAX_PARENT_MAX|RS_Y_MAX_OWN_MIN, [0, i], '0 8');
i += 8;
}
fclose(f);
}
else
{
//throw a load of bind options onto it by reading from the array.
for (i = 0; i < sizeof(binds) / sizeof(binds[0]); i++)
{
if (binds[i].name == "") //no name is a spacer
continue;
fr.add(menuitembind_spawn(binds[i].name, binds[i].cmd, '280 8'), RS_X_MIN_PARENT_MIN|RS_Y_MIN_PARENT_MIN | RS_X_MAX_PARENT_MAX|RS_Y_MAX_OWN_MIN, [0, (i*8)], '0 8');
}
}
//and give us a suitable menu tint too, just because.
addmenuback(m);
};