about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authorJakob Fries <jakob.fries@gmail.com>2007-08-04 17:28:31 +0000
committerJakob Fries <jakob.fries@gmail.com>2007-08-04 17:28:31 +0000
commitee2ff62378d044f4d6e75267f0c50ad9b7989fa9 (patch)
treed78d6ed31a4e46069582e9b8fb7886c21a3af06a /src/game
parent45725726c1428e6434a043583df1e4a96467f78a (diff)
downloadzcatch-ee2ff62378d044f4d6e75267f0c50ad9b7989fa9.tar.gz
zcatch-ee2ff62378d044f4d6e75267f0c50ad9b7989fa9.zip
hit ding sound now in
Diffstat (limited to 'src/game')
-rw-r--r--src/game/server/game_server.cpp24
-rw-r--r--src/game/server/game_server.h3
2 files changed, 21 insertions, 6 deletions
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index ecbc7663..feff9a56 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -34,6 +34,7 @@ void create_smoke(vec2 p);
 void create_spawn(vec2 p);
 void create_death(vec2 p);
 void create_sound(vec2 pos, int sound, int loopflags = 0);
+void create_targetted_sound(vec2 pos, int sound, int target, int loopflags = 0);
 class player *intersect_player(vec2 pos0, vec2 pos1, vec2 &new_pos, class entity *notthis = 0);
 
 template<typename T>
@@ -133,12 +134,13 @@ event_handler::event_handler()
 	clear();
 }
 
-void *event_handler::create(int type, int size)
+void *event_handler::create(int type, int size, int target)
 {
 	void *p = &data[current_offset];
 	offsets[num_events] = current_offset;
 	types[num_events] = type;
 	sizes[num_events] = size;
+	targets[num_events] = target;
 	current_offset += size;
 	num_events++;
 	return p;
@@ -154,8 +156,11 @@ void event_handler::snap(int snapping_client)
 {
 	for(int i = 0; i < num_events; i++)
 	{
-		void *d = snap_new_item(types[i], i, sizes[i]);
-		mem_copy(d, &data[offsets[i]], sizes[i]);
+		if (targets[i] == -1 || targets[i] == snapping_client)
+		{
+			void *d = snap_new_item(types[i], i, sizes[i]);
+			mem_copy(d, &data[offsets[i]], sizes[i]);
+		}
 	}
 }
 
@@ -556,7 +561,11 @@ void projectile::tick()
 		if (flags & PROJECTILE_FLAGS_EXPLODE)
 			create_explosion(oldpos, owner, weapon, false);
 		else if (targetplayer)
+		{
 			targetplayer->take_damage(normalize(vel) * max(0.001f, force), damage, owner, weapon);
+				
+			create_targetted_sound(pos, SOUND_HIT, owner);
+		}
 			
 		world.destroy_entity(this);
 	}
@@ -1684,18 +1693,23 @@ void create_death(vec2 p)
 	ev->y = (int)p.y;
 }
 
-void create_sound(vec2 pos, int sound, int loopingflags)
+void create_targetted_sound(vec2 pos, int sound, int target, int loopingflags)
 {
 	if (sound < 0)
 		return;
 
 	// create a sound
-	ev_sound *ev = (ev_sound *)events.create(EVENT_SOUND, sizeof(ev_sound));
+	ev_sound *ev = (ev_sound *)events.create(EVENT_SOUND, sizeof(ev_sound), target);
 	ev->x = (int)pos.x;
 	ev->y = (int)pos.y;
 	ev->sound = sound | loopingflags;
 }
 
+void create_sound(vec2 pos, int sound, int loopingflags)
+{
+	create_targetted_sound(pos, sound, -1, loopingflags);
+}
+
 // TODO: should be more general
 player* intersect_player(vec2 pos0, vec2 pos1, vec2& new_pos, entity* notthis)
 {
diff --git a/src/game/server/game_server.h b/src/game/server/game_server.h
index 2bc7796e..a112cf32 100644
--- a/src/game/server/game_server.h
+++ b/src/game/server/game_server.h
@@ -8,13 +8,14 @@ class event_handler
 	int types[MAX_EVENTS];  // TODO: remove some of these arrays
 	int offsets[MAX_EVENTS];
 	int sizes[MAX_EVENTS];
+	int targets[MAX_EVENTS];
 	char data[MAX_DATASIZE];
 	
 	int current_offset;
 	int num_events;
 public:
 	event_handler();
-	void *create(int type, int size);
+	void *create(int type, int size, int target = -1);
 	void clear();
 	void snap(int snapping_client);
 };