about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-09 22:41:26 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-09 22:41:26 +0000
commit1f2ffb0ffeeccd2e9ec7cf549a27a60929853d72 (patch)
tree2aed92b1a63ba92f3d0f29062eb6a5042ba1f870
parentc3b6b87b5ae19fbeac1ab29f73625eed802651b2 (diff)
downloadzcatch-1f2ffb0ffeeccd2e9ec7cf549a27a60929853d72.tar.gz
zcatch-1f2ffb0ffeeccd2e9ec7cf549a27a60929853d72.zip
applied patch for hook bug
-rw-r--r--src/game/gamecore.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/game/gamecore.cpp b/src/game/gamecore.cpp
index c15f3adf..8d167398 100644
--- a/src/game/gamecore.cpp
+++ b/src/game/gamecore.cpp
@@ -314,6 +314,7 @@ void CHARACTER_CORE::tick(bool use_input)
 		// Check against other players first
 		if(world)
 		{
+			float dist = 0.0f;
 			for(int i = 0; i < MAX_CLIENTS; i++)
 			{
 				CHARACTER_CORE *p = world->characters[i];
@@ -323,10 +324,13 @@ void CHARACTER_CORE::tick(bool use_input)
 				vec2 closest_point = closest_point_on_line(hook_pos, new_pos, p->pos);
 				if(distance(p->pos, closest_point) < phys_size+2.0f)
 				{
-					triggered_events |= COREEVENT_HOOK_ATTACH_PLAYER;
-					hook_state = HOOK_GRABBED;
-					hooked_player = i;
-					break;
+					if (hooked_player == -1 || distance (hook_pos, p->pos) < dist)
+					{
+						triggered_events |= COREEVENT_HOOK_ATTACH_PLAYER;
+						hook_state = HOOK_GRABBED;
+						hooked_player = i;
+						dist = distance (hook_pos, p->pos);
+					}
 				}
 			}
 		}