Convert the player menu to using the plist.

Various things are decidedly broken:
  * shirt and pants colors cannot be changed
  * shirt and pants color views gobble the cursor keys (cannot leave them)
  * input fields do not get updated if the cvar is changed elsewhere
  * name input field (at least) does not set the new name
However, at least the escape problem is fixed :)
This commit is contained in:
Bill Currie 2011-07-06 19:21:35 +09:00
parent 4e66a5b327
commit 508fd22d27
3 changed files with 149 additions and 145 deletions

View file

@ -481,4 +481,129 @@
},
);
};
player_options = {
Class = MenuGroup;
Messages = (
(initWithBounds:, $rect),
(addViews:, $views),
(setBase:, 4)
);
rect = "[0, 0, 320, 200]";
views = (
{
Class = Pic;
Messages = (
(initWithBounds:, $rect),
(setPic:, "\"gfx/qplaque.lmp\"")
);
rect = "[16, 4, 0, 0]";
},
{
Class = CenterPic;
Messages = (
(initWithBounds:, $rect),
(setPic:, "\"gfx/p_option.lmp\"")
);
rect = "[160, 4, 0, 0]";
},
{
Class = Text;
Messages = (
(initWithBounds:, $rect),
(setText:, "\"Player\"")
);
rect = "[54, 40, 48, 8]";
},
{
Class = Text;
Messages = (
(initWithBounds:, $rect),
(setText:, "\"------\"")
);
rect = "[54, 50, 48, 8]";
},
{
Class = CvarStringView;
Messages = (
(initWithBounds:title:inputLength::, $rect, "\"Name \"", 18, $cvstring)
);
rect = "[70, 68, 224, 8]";
cvstring = {
Class = CvarString;
Messages = (
(initWithCvar:, "\"menu_name\"")//aliased to real cvar
);
};
},
{
Class = CvarStringView;
Messages = (
(initWithBounds:title:inputLength::, $rect, "\"Team \"", 7, $cvstring)
);
rect = "[70, 88, 224, 8]";
cvstring = {
Class = CvarString;
Messages = (
(initWithCvar:, "\"menu_team\"")//aliased to real cvar
);
};
},
{
Class = ProxyView;
Messages = (
(initWithBounds:title:view:, $rect, $title, $view),
);
rect = "[70, 105, 224, 8]";
title = {
Class = Text;
Messages = (
(initWithBounds:, $rect),
(setText:, "\"Shirt Color\"")
);
rect = "[0, 0, 224, 8]";
};
view = {
Class = CvarColorView;
color = {
Class = CvarColor;
Messages = (
(initWithCvar:, "\"topcolor\"")
);
};
rect = "[186, -8, 32, 24]";
Messages = (
(initWithBounds::, $rect, $color)
);
};
},
{
Class = ProxyView;
Messages = (
(initWithBounds:title:view:, $rect, $title, $view),
);
rect = "[70, 120, 224, 8]";
title = {
Class = Text;
Messages = (
(initWithBounds:, $rect),
(setText:, "\"Pants Color\"")
);
rect = "[0, 0, 224, 8]";
};
view = {
Class = CvarColorView;
color = {
Class = CvarColor;
Messages = (
(initWithCvar:, "\"bottomcolor\"")
);
};
rect = "[186, -8, 32, 24]";
Messages = (
(initWithBounds::, $rect, $color)
);
};
},
);
};
}

View file

@ -315,66 +315,9 @@ string player_config_vals[NUM_PLAYERCONFIG_CMDS] = {
int (int key, int unicode, int down)
KEYEV_player_options =
KEY_player_options =
{
switch (key) {
case QFK_DOWN:
case QFM_WHEEL_DOWN:
if (!player_config_iactive) {
player_config_cursor ++;
player_config_cursor %= NUM_PLAYERCONFIG_CMDS;
}
break;
case QFK_UP:
case QFM_WHEEL_UP:
if (!player_config_iactive) {
player_config_cursor += NUM_PLAYERCONFIG_CMDS - 1;
player_config_cursor %= NUM_PLAYERCONFIG_CMDS;
}
break;
case QFK_RETURN:
if (player_config_iactive) {
if (player_config_iactive == player_config_plname_il) {
Cvar_SetString (playername_cvar,
[player_config_plname_il text]);
} else if (player_config_iactive == player_config_tname_il) {
Cvar_SetString (teamname_cvar,
[player_config_tname_il text]);
}
player_config_iactive = nil;
} else {
if (player_config_cursor == 0) {
player_config_iactive = player_config_plname_il;
} else if (player_config_cursor == 1) {
player_config_iactive = player_config_tname_il;
}
}
break;
}
if(key != QFK_RETURN && player_config_iactive) {
[player_config_iactive processInput:(key >= 256 ? key : unicode)];
}
if(!(key == QFK_RIGHT || key == QFK_LEFT )) {
return 1;
}
switch (player_config_vals[player_config_cursor]) {
case "topcolor":
if (key == QFK_RIGHT)
[topcolor_view next];
else if (key == QFK_LEFT)
[topcolor_view prev];
break;
case "bottomcolor":
if (key == QFK_RIGHT)
[bottomcolor_view next];
else if (key == QFK_LEFT)
[bottomcolor_view prev];
break;
}
return 1;
return [player_options keyEvent:key unicode:unicode down:down];
};
/*
@ -385,39 +328,12 @@ KEYEV_player_options =
int (int x, int y)
DRAW_player_options =
{
local int cursor_pad = 0, spacing = 120;
[player_config_plname_il cursor: player_config_iactive == player_config_plname_il];
[player_config_tname_il cursor: player_config_iactive == player_config_tname_il];
[player_options setBasePos:x y:y];
[player_options draw];
opt_cursor (x + 62, y + player_config_cursor_tbl[player_config_cursor]);
return 1;
};
/*
CB_ME_player_options
Entercallback for the playermenu.
For initalising the playername and teamname.
*/
void ()
CB_ME_player_options =
{
if (gametype () == "quakeworld") {
playername_cvar = "name";
} else {
playername_cvar = "_cl_name";
}
teamname_cvar = "team"; // FIXME: is this something else in netquake?
[player_config_plname_il setText:Cvar_GetString (playername_cvar)];
[player_config_tname_il setText:Cvar_GetString (teamname_cvar)];
};
/*
MENU_player_options
@ -426,66 +342,28 @@ CB_ME_player_options =
void
MENU_player_options (PLItem *plist)
{
local Rect rect;
local id view;
player_options = [[Group alloc] initWithComponents:0 :0 :320 :200];
view = [[Pic alloc] initWithComponents:16 :4 :0 :0];
[view setPic:"gfx/qplaque.lmp"];
[player_options addView:view];
view = [[CenterPic alloc] initWithComponents:160 :4 :0 :0];
[view setPic:"gfx/p_option.lmp"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:54 :40 :48 :8];
[view setText:"Player"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:54 :50 :48 :8];
[view setText:"------"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:70 :PLAYER_CONF_Y_PAD + 8 :32 :8];
[view setText:"Name"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:70 :PLAYER_CONF_Y_PAD + 28 :32 :8];
[view setText:"Team"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:70 :PLAYER_CONF_Y_PAD + 45 :88 :8];
[view setText:"Shirt color"];
[player_options addView:view];
view = [[Text alloc] initWithComponents:70 :PLAYER_CONF_Y_PAD + 60 :88 :8];
[view setText:"Pants color"];
[player_options addView:view];
player_config_plname_il = [[InputLineBox alloc] initWithBounds:makeRect (120, PLAYER_CONF_Y_PAD, 18, 4) promptCharacter:' '];
[player_config_plname_il setWidth:18];
[player_options addView:player_config_plname_il];
player_config_tname_il = [[InputLineBox alloc] initWithBounds:makeRect (120, PLAYER_CONF_Y_PAD + 20, 7, 4) promptCharacter:' '];
[player_config_tname_il setWidth:7];
[player_options addView:player_config_tname_il];
player_config_iactive = nil;
rect = makeRect (192, PLAYER_CONF_Y_PAD + 37, 24, 24);
topcolor_view = [[CvarColorView alloc] initWithBounds:rect :[[CvarColor alloc] initWithCvar:"topcolor"]];
[player_options addView:topcolor_view];
rect.origin.y = PLAYER_CONF_Y_PAD + 52;
bottomcolor_view = [[CvarColorView alloc] initWithBounds:rect :[[CvarColor alloc] initWithCvar:"bottomcolor"]];
[player_options addView:bottomcolor_view];
local @param ret;
Menu_Begin (54, 80, "Player");
Menu_FadeScreen (1);
Menu_KeyEvent (KEYEV_player_options);
Menu_EnterHook (CB_ME_player_options);
Menu_Draw (DRAW_player_options);
Menu_KeyEvent (KEY_player_options);
// setup cvar aliases so the player options can refer to the appropriate
// cvar using just the one name
if (gametype () == "quakeworld") {
Cvar_MakeAlias ("menu_name", "name");
} else {
Cvar_MakeAlias ("menu_name", "_cl_name");
}
// FIXME: is this something else in netquake?
Cvar_MakeAlias ("menu_team", "team");
if (plist) {
ret = object_from_plist ([(PLDictionary*) plist getObjectForKey:"player_options"]);
player_options = ret.pointer_val;
}
Menu_End ();
};
@ -546,8 +424,6 @@ MENU_network_options (PLItem *plist)
Menu_KeyEvent (KEY_network_options);
Menu_Draw (DRAW_network_options);
network_options = [[Group alloc] initWithComponents:0 :0 :320 :200];
if (plist) {
ret = object_from_plist ([(PLDictionary*) plist getObjectForKey:"network_options"]);
network_options = ret.pointer_val;

View file

@ -32,6 +32,9 @@
#include "gui/Rect.h"
#include "plistmenu.h"
@reference Pic;
@reference CenterPic;
@static @param
class_from_plist (PLDictionary *pldict)
{