diff options
| author | Jakob Fries <jakob.fries@gmail.com> | 2007-08-04 17:28:31 +0000 |
|---|---|---|
| committer | Jakob Fries <jakob.fries@gmail.com> | 2007-08-04 17:28:31 +0000 |
| commit | ee2ff62378d044f4d6e75267f0c50ad9b7989fa9 (patch) | |
| tree | d78d6ed31a4e46069582e9b8fb7886c21a3af06a /src/game | |
| parent | 45725726c1428e6434a043583df1e4a96467f78a (diff) | |
| download | zcatch-ee2ff62378d044f4d6e75267f0c50ad9b7989fa9.tar.gz zcatch-ee2ff62378d044f4d6e75267f0c50ad9b7989fa9.zip | |
hit ding sound now in
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/server/game_server.cpp | 24 | ||||
| -rw-r--r-- | src/game/server/game_server.h | 3 |
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); }; |