diff options
| author | Jakob Fries <jakob.fries@gmail.com> | 2007-11-24 14:07:06 +0000 |
|---|---|---|
| committer | Jakob Fries <jakob.fries@gmail.com> | 2007-11-24 14:07:06 +0000 |
| commit | 79d495233fa7f14c3ad5ad3e6c3db26220d2f2a3 (patch) | |
| tree | b1c1df5a3cb1685fe22f7a253f5d3404ddb11765 | |
| parent | 51710edd8e8869a8233e7b8c4204e6b2e3fcbe42 (diff) | |
| download | zcatch-79d495233fa7f14c3ad5ad3e6c3db26220d2f2a3.tar.gz zcatch-79d495233fa7f14c3ad5ad3e6c3db26220d2f2a3.zip | |
autoswitch weapons option
| -rw-r--r-- | src/game/client/game_client.cpp | 16 | ||||
| -rw-r--r-- | src/game/client/menu.cpp | 56 | ||||
| -rw-r--r-- | src/game/game_protocol.h | 3 | ||||
| -rw-r--r-- | src/game/game_variables.h | 1 | ||||
| -rw-r--r-- | src/game/server/game_server.cpp | 13 |
5 files changed, 83 insertions, 6 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp index d31d0147..c2846c15 100644 --- a/src/game/client/game_client.cpp +++ b/src/game/client/game_client.cpp @@ -53,6 +53,8 @@ const obj_player_info *local_info = 0; static const obj_flag *flags[2] = {0,0}; static const obj_game *gameobj = 0; +static int picked_up_weapon = 0; + static struct client_data { char name[64]; @@ -2147,7 +2149,11 @@ void render_game() if(inp_key_presses(config.key_next_weapon) || inp_key_presses(config.key_prev_weapon)) input.wanted_weapon = 0; - else + else if (config.autoswitch_weapons && picked_up_weapon) + { + input.wanted_weapon = picked_up_weapon; + } + else { if(inp_key_presses(config.key_weapon1)) input.wanted_weapon = 1; if(inp_key_presses(config.key_weapon2)) input.wanted_weapon = 2; @@ -2156,6 +2162,8 @@ void render_game() if(inp_key_presses(config.key_weapon5)) input.wanted_weapon = 5; if(inp_key_presses(config.key_weapon6)) input.wanted_weapon = 6; } + + picked_up_weapon = 0; } // stress testing @@ -2766,6 +2774,12 @@ extern "C" void modc_message(int msg) client_datas[cid].skin_info.color_feet = vec4(1,1,1,1); } } + else if(msg == MSG_WEAPON_PICKUP) + { + int weapon = msg_unpack_int(); + + picked_up_weapon = weapon+1; + } else if(msg == MSG_READY_TO_ENTER) { client_entergame(); diff --git a/src/game/client/menu.cpp b/src/game/client/menu.cpp index 6067edf0..9395965d 100644 --- a/src/game/client/menu.cpp +++ b/src/game/client/menu.cpp @@ -944,8 +944,24 @@ static void middle_render(const struct rect *r) { static struct rect browser; static bool inited = false; + ui_margin(r, 5, &browser); - ui_do_button_rect(&browser, "b", 0, &browser, draw_teewars_button, 0); + + { + struct rect button_row; + static struct rect button_refresh, button_connect; + + ui_hsplit_b(&browser, 30, &browser, &button_row); + ui_vsplit_l(&button_row, 100, &button_refresh, &button_row); + ui_vsplit_l(&button_row, 100, &button_connect, &button_row); + + if (ui_do_button_rect(&button_refresh, "Refresh", 0, &button_refresh, draw_teewars_button, 0)) + client_serverbrowse_refresh(0); + + if (ui_do_button_rect(&button_connect, "Connect", 0, &button_connect, draw_teewars_button, 0)) + {} + + } if (!inited) { @@ -957,7 +973,34 @@ static void middle_render(const struct rect *r) int server_count = client_serverbrowse_sorted_num(); int i; - struct rect rest = *r; + struct rect rest = browser; + + struct rect button_row; + + static struct rect button_name, button_players, button_players_max, button_map, button_latency, button_progression; + + ui_hsplit_t(&rest, 32, &button_row, &rest); + ui_margin(&button_row, 1, &button_row); + + ui_vsplit_l(&button_row, 400, &button_name, &button_row); + ui_vsplit_l(&button_row, 40, &button_players, &button_row); + ui_vsplit_l(&button_row, 40, &button_players_max, &button_row); + ui_vsplit_l(&button_row, 80, &button_map, &button_row); + ui_vsplit_l(&button_row, 40, &button_latency, &button_row); + ui_vsplit_l(&button_row, 40, &button_progression, &button_row); + + if (ui_do_button_rect(&button_name, "Name", 0, &button_name, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_NAME; + if (ui_do_button_rect(&button_players, "Players", 0, &button_players, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_NUMPLAYERS; + if (ui_do_button_rect(&button_players_max, "Max Players", 0, &button_players_max, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_NUMPLAYERS; // TODO: real enum here + if (ui_do_button_rect(&button_map, "Map", 0, &button_map, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_MAP; + if (ui_do_button_rect(&button_latency, "Ping", 0, &button_latency, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_PING; + if (ui_do_button_rect(&button_progression, "Progression", 0, &button_progression, draw_teewars_button, 0)) + config.b_sort = BROWSESORT_PING; // TODO: real enum here for (i = 0; i < server_count; i++) { @@ -966,7 +1009,12 @@ static void middle_render(const struct rect *r) struct rect col_name, col_players, col_players_max, col_map, col_latency, col_progression; char temp[16]; + ui_hsplit_t(&rest, 32, &row, &rest); + + if (rest.h < 0) + break; + ui_margin(&row, 1, &row); ui_vsplit_l(&row, 400, &col_name, &row); @@ -1728,10 +1776,10 @@ static int menu_render(bool ingame) ui_scale(scale); int retn = ui_menu_render(screen); - gfx_texture_set(-1); + /*gfx_texture_set(-1); gfx_lines_begin(); ui_foreach_rect(draw_rect); - gfx_lines_end(); + gfx_lines_end();*/ return retn; } diff --git a/src/game/game_protocol.h b/src/game/game_protocol.h index eb59590a..1060a653 100644 --- a/src/game/game_protocol.h +++ b/src/game/game_protocol.h @@ -48,7 +48,8 @@ enum MSG_EMOTICON, MSG_STARTINFO, // client -> server MSG_CHANGEINFO, // client -> server - MSG_READY_TO_ENTER // server -> client + MSG_READY_TO_ENTER, // server -> client + MSG_WEAPON_PICKUP }; enum diff --git a/src/game/game_variables.h b/src/game/game_variables.h index 421f376e..1ab84f62 100644 --- a/src/game/game_variables.h +++ b/src/game/game_variables.h @@ -19,6 +19,7 @@ MACRO_CONFIG_INT(key_emoticon, 'E', 32, 512) MACRO_CONFIG_INT(key_chat, 'T', 32, 512) MACRO_CONFIG_INT(key_teamchat, 'Y', 32, 512) +MACRO_CONFIG_INT(autoswitch_weapons, 0, 0, 1) MACRO_CONFIG_INT(scroll_weapon, 1, 0, 1) MACRO_CONFIG_INT(scorelimit, 20, 0, 1000) diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp index 797f31bf..1ef23052 100644 --- a/src/game/server/game_server.cpp +++ b/src/game/server/game_server.cpp @@ -1189,6 +1189,9 @@ void powerup::reset() spawntick = -1; } + +void send_weapon_pickup(int cid, int weapon); + void powerup::tick() { // wait for respawn @@ -1245,6 +1248,8 @@ void powerup::tick() create_sound(pos, SOUND_PICKUP_ROCKET); else if(subtype == WEAPON_SHOTGUN) create_sound(pos, SOUND_PICKUP_SHOTGUN); + + send_weapon_pickup(pplayer->client_id, subtype); } } break; @@ -1537,6 +1542,14 @@ void send_emoticon(int cid, int emoticon) server_send_msg(-1); } +void send_weapon_pickup(int cid, int weapon) +{ + msg_pack_start(MSG_WEAPON_PICKUP, MSGFLAG_VITAL); + msg_pack_int(weapon); + msg_pack_end(); + server_send_msg(cid); +} + void mods_client_enter(int client_id) { world->insert_entity(&players[client_id]); |