diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-10-28 11:12:22 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-10-28 11:12:22 +0200 |
| commit | 4e378fe6a3aacb398d88865b833b12e3dbd194a3 (patch) | |
| tree | ba245c0f0f52a81a77a76c927f4d5118e7b3c1ea /src | |
| parent | 18c1dfbb78d98516f5480f8199910fe41ac904df (diff) | |
player reloading delay
Diffstat (limited to 'src')
| -rw-r--r-- | src/asset_defs.c | 1 | ||||
| -rw-r--r-- | src/bullets.c | 13 | ||||
| -rw-r--r-- | src/players.c | 12 |
3 files changed, 22 insertions, 4 deletions
diff --git a/src/asset_defs.c b/src/asset_defs.c index 2c51369..bc3919c 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -34,4 +34,5 @@ void load_assets() { // sounds wav_throwable_bounce = Mix_LoadWAV("data/sounds/throwable_bounce.wav"); + wav_shoot_mp5 = Mix_LoadWAV("data/sounds/shoot_mp5.wav"); }
\ No newline at end of file diff --git a/src/bullets.c b/src/bullets.c index dcdc02a..47171bb 100644 --- a/src/bullets.c +++ b/src/bullets.c @@ -5,6 +5,10 @@ void shoot(platform_window* window, u32 id, float dirx, float diry) { if (!p) { log_info("User with unknown id shot"); } + if (p->interact_state != INTERACT_IDLE) { + return; + } + gun g = get_gun_by_type(p->guntype); float time_between_bullets = 1.0f/g.shots_per_second; @@ -17,12 +21,13 @@ void shoot(platform_window* window, u32 id, float dirx, float diry) { if (bullets_to_shoot > p->ammo_in_mag) bullets_to_shoot = p->ammo_in_mag; p->ammo_in_mag -= bullets_to_shoot; if (p->ammo_in_mag == 0) { - int amount_to_reload = g.magazine_size; - if (amount_to_reload > p->total_ammo) amount_to_reload = p->total_ammo; - p->total_ammo -= amount_to_reload; - p->ammo_in_mag = amount_to_reload; + p->interact_state = INTERACT_RELOADING; + p->sec_since_interact_state_change = 0; + return; } + play_positioned_sound(CHANNEL_SHOOTING, wav_shoot_mp5, (vec3f){.x = p->playerx, .y = p->playery, .z = p->height}, 20); + for (int i = 0; i < bullets_to_shoot; i++) { map_info info = get_map_info(window); diff --git a/src/players.c b/src/players.c index 4ea763d..03ee4e0 100644 --- a/src/players.c +++ b/src/players.c @@ -215,6 +215,18 @@ void update_players_server() { for (int i = 0; i < MAX_PLAYERS; i++) { if (!players[i].active) continue; players[i].sec_since_last_shot += SERVER_TICK_RATE; + players[i].sec_since_interact_state_change += SERVER_TICK_RATE; + + gun g = get_gun_by_type(players[i].guntype); + if (players[i].interact_state == INTERACT_RELOADING && players[i].sec_since_interact_state_change >= g.reload_time) { + int amount_to_reload = g.magazine_size; + if (amount_to_reload > players[i].total_ammo) amount_to_reload = players[i].total_ammo; + players[i].total_ammo -= amount_to_reload; + players[i].ammo_in_mag = amount_to_reload; + + players[i].interact_state = INTERACT_IDLE; + } + update_sprite(&players[i].sprite); } } |
