From 7b956089e6ba5162fb0b667f1c0a60f6ece90c38 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 15 Dec 2022 12:59:19 +0100 Subject: added drops --- src/drops.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/drops.c (limited to 'src/drops.c') diff --git a/src/drops.c b/src/drops.c new file mode 100644 index 0000000..f5f4fa0 --- /dev/null +++ b/src/drops.c @@ -0,0 +1,80 @@ +#include "../include/drops.h" +#include "../include/objects.h" + +void handle_drop_pickup(player* p, drop* d) { + if (!d->active) return; + + switch(d->type) { + case DROP_AMMO: p->total_ammo += d->data.ammo_count; break; + + default: log_infox("Unhandled drop type: %d", d->type); break; + } + d->active = false; +} + +void update_drops() { + #define MAX_HEIGHT_DIFF (0.3f) + #define FREQUENCY (0.15) + + for (int i = 0; i < MAX_DROPS; i++) { + drop b = drops[i]; + if (!b.active) continue; + + drops[i].time_active += update_delta; + drops[i].position.z = MAX_HEIGHT_DIFF * sin (2 * M_PI * 0.5f * (drops[i].time_active) + 0) + b.start_h; + + for (int x = 0; x < max_players; x++) { + player *p = &players[x]; + if (!p->active) continue; + + if (check_if_player_collided_with_box(*p, get_box_of_square(drops[i].position, drops[i].size))) { + handle_drop_pickup(p, &drops[i]); + } + } + } +} + +void draw_drops(platform_window* window) { + for (int i = 0; i < MAX_DROPS; i++) { + drop b = drops[i]; + if (!b.active) continue; + + DROP_RENDER_DEPTH((int)(b.position.y)); + + b.position.z = b.start_h; + b.size.z = 0.0f; + b.position.y += 0.2f; + b.position.x -= 0.07f; + box shadow_box = get_render_box_of_square(window, b.position, b.size); + render_quad_with_outline(shadow_box.tl_b, shadow_box.tr_b, shadow_box.bl_b, shadow_box.br_b, rgba(0,0,0,120)); + render_quad_with_outline(shadow_box.tl_u, shadow_box.tr_u, shadow_box.bl_u, shadow_box.br_u, rgba(0,0,0,120)); + render_quad_with_outline(shadow_box.tl_u, shadow_box.tl_b, shadow_box.bl_u, shadow_box.bl_b, rgba(0,0,0,120)); + render_quad_with_outline(shadow_box.bl_u, shadow_box.br_u, shadow_box.bl_b, shadow_box.br_b, rgba(0,0,0,120)); + + b = drops[i]; + box full_box = get_render_box_of_square(window, b.position, b.size); + render_quad_with_outline(full_box.tl_b, full_box.tr_b, full_box.bl_b, full_box.br_b, rgb(218,112,214)); + render_quad_with_outline(full_box.tl_u, full_box.tr_u, full_box.bl_u, full_box.br_u, rgb(218,112,214)); + render_quad_with_outline(full_box.tl_u, full_box.tl_b, full_box.bl_u, full_box.bl_b, rgb(218,112,214)); + render_quad_with_outline(full_box.bl_u, full_box.br_u, full_box.bl_b, full_box.br_b, rgb(218,112,214)); + } +} + +void spawn_drop(vec3f pos) { + for (int i = 0; i < MAX_DROPS; i++) { + drop b = drops[i]; + if (b.active) continue; + + drop new_drop; + new_drop.active = true; + new_drop.time_active = 0.0f; + new_drop.position = pos; + new_drop.size = (vec3f){0.3f, 0.3f, 0.4f}; + new_drop.start_h = pos.z; + new_drop.type = DROP_AMMO; + new_drop.data.ammo_count = 10; + + drops[i] = new_drop; + break; + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2