about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-10-04 22:37:35 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-10-04 22:37:35 +0000
commitb73dcec3975877fd374b55b425c99bb1d6921b53 (patch)
tree4463603511162ff4986bccfa37ee8768848a20eb /src/game
parent10812e621a4cf485a62d76444a6af5dec6cc92f1 (diff)
downloadzcatch-b73dcec3975877fd374b55b425c99bb1d6921b53.tar.gz
zcatch-b73dcec3975877fd374b55b425c99bb1d6921b53.zip
added mousewheel support. added next/prev weapon support
Diffstat (limited to 'src/game')
-rw-r--r--src/game/client/game_client.cpp15
-rw-r--r--src/game/client/menu.cpp8
-rw-r--r--src/game/game_variables.h4
-rw-r--r--src/game/server/game_server.cpp32
4 files changed, 42 insertions, 17 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index dfb8e698..80a71114 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -1780,7 +1780,7 @@ void render_game()
 			
 		input.target_x = (int)mouse_pos.x;
 		input.target_y = (int)mouse_pos.y;
-		input.activeweapon = -1;
+		input.activeweapon = 0;
 	
 		if(chat_mode != CHATMODE_NONE)
 			input.state = STATE_CHATTING;
@@ -1795,13 +1795,14 @@ void render_game()
 			// TODO: this is not very well done. it should check this some other way
 			input.fire = emoticon_selector_active ? 0 : inp_key_pressed(config.key_fire);
 			input.hook = inp_key_pressed(config.key_hook);
-
-			//input.blink = inp_key_pressed('S');
+			
 			// Weapon switching
-			if(inp_key_pressed(config.key_weapon1)) input.activeweapon = 0;
-			if(inp_key_pressed(config.key_weapon2)) input.activeweapon = 1;
-			if(inp_key_pressed(config.key_weapon3)) input.activeweapon = 2;
-			if(inp_key_pressed(config.key_weapon4)) input.activeweapon = 3;
+			if(inp_key_pressed(config.key_next_weapon)) input.activeweapon = -1;
+			if(inp_key_pressed(config.key_prev_weapon)) input.activeweapon = -2;
+			if(inp_key_pressed(config.key_weapon1)) input.activeweapon = 1;
+			if(inp_key_pressed(config.key_weapon2)) input.activeweapon = 2;
+			if(inp_key_pressed(config.key_weapon3)) input.activeweapon = 3;
+			if(inp_key_pressed(config.key_weapon4)) input.activeweapon = 4;
 		}
 		
 		// stress testing
diff --git a/src/game/client/menu.cpp b/src/game/client/menu.cpp
index e781fcdf..ad418615 100644
--- a/src/game/client/menu.cpp
+++ b/src/game/client/menu.cpp
@@ -807,10 +807,12 @@ static int settings_controls_render()
 		{ "Jump:", &config_copy.key_jump, config_set_key_jump },
 		{ "Fire:", &config_copy.key_fire, config_set_key_fire },
 		{ "Hook:", &config_copy.key_hook, config_set_key_hook },
-		{ "Pistol:", &config_copy.key_weapon1, config_set_key_weapon1 },
-		{ "Grenade:", &config_copy.key_weapon2, config_set_key_weapon2 },
+		{ "Hammer:", &config_copy.key_weapon1, config_set_key_weapon1 },
+		{ "Pistol:", &config_copy.key_weapon2, config_set_key_weapon2 },
 		{ "Shotgun:", &config_copy.key_weapon3, config_set_key_weapon3 },
-		{ "Hammer:", &config_copy.key_weapon4, config_set_key_weapon4 },
+		{ "Grenade:", &config_copy.key_weapon4, config_set_key_weapon4 },
+		{ "Next Weapon:", &config_copy.key_next_weapon, config_set_key_next_weapon },
+		{ "Prev. Weapon:", &config_copy.key_prev_weapon, config_set_key_prev_weapon },
 		{ "Emoticon:", &config_copy.key_emoticon, config_set_key_emoticon },
 		{ "Screenshot:", &config_copy.key_screenshot, config_set_key_screenshot },
 	};
diff --git a/src/game/game_variables.h b/src/game/game_variables.h
index 464f30a9..889b8786 100644
--- a/src/game/game_variables.h
+++ b/src/game/game_variables.h
@@ -7,6 +7,10 @@ MACRO_CONFIG_INT(key_weapon1, '1', 32, 512)
 MACRO_CONFIG_INT(key_weapon2, '2', 32, 512)
 MACRO_CONFIG_INT(key_weapon3, '3', 32, 512)
 MACRO_CONFIG_INT(key_weapon4, '4', 32, 512)
+
+MACRO_CONFIG_INT(key_next_weapon, 382, 32, 512)
+MACRO_CONFIG_INT(key_prev_weapon, 383, 32, 512)
+
 MACRO_CONFIG_INT(key_emoticon, 'E', 32, 512)
 
 MACRO_CONFIG_INT(key_chat, 'T', 32, 512)
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index cf4be747..95b01967 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -725,16 +725,34 @@ int player::handle_weapons()
 	}
 
 	// switch weapon if wanted		
-	if(input.activeweapon >= 0 && input.activeweapon < NUM_WEAPONS && weapons[input.activeweapon].got && 
-		data->weapons[active_weapon].duration <= 0)
+	if(input.activeweapon && data->weapons[active_weapon].duration <= 0)
 	{
-		if (active_weapon != input.activeweapon)
-			create_sound(pos, SOUND_WEAPON_SWITCH);
+		int new_weapon = active_weapon;
+		if(input.activeweapon > 0) // straight selection
+			new_weapon = input.activeweapon-1;
+		else if(input.activeweapon == -1 && !previnput.activeweapon) // next weapon
+		{
+			do
+				new_weapon = (new_weapon+1)%NUM_WEAPONS;
+			while(!weapons[new_weapon].got);
+		}
+		else if(input.activeweapon == -2 && !previnput.activeweapon)
+		{
+			do
+				new_weapon = (new_weapon-1)<0?NUM_WEAPONS-1:new_weapon-1;
+			while(!weapons[new_weapon].got);
+		}
+			
+		if(new_weapon >= 0 && new_weapon < NUM_WEAPONS && weapons[new_weapon].got)
+		{
+			if(active_weapon != new_weapon)
+				create_sound(pos, SOUND_WEAPON_SWITCH);
 
-		last_weapon = active_weapon;
-		active_weapon = input.activeweapon;
+			last_weapon = active_weapon;
+			active_weapon = new_weapon;
+		}
 	}
-
+	
 	if(!previnput.fire && input.fire)
 	{
 		if(reload_timer == 0)