diff --git a/code/first.c b/code/first.c index 2e7c94d..987405e 100644 --- a/code/first.c +++ b/code/first.c @@ -9,6 +9,7 @@ #include "vulkan/core.h" #include "game/impl/player.c" +#include "game/impl/aabb.c" int main(int argc, char **argv) { @@ -34,11 +35,31 @@ int main(int argc, char **argv) Player player; player.pos.x = 0; player.pos.y = 0; + AABB a; + a.pos.x = 10; + a.pos.y = 10; + a.size.x = 10; + a.size.y = 10; while (running) { SDL_Event e; while (SDL_PollEvent(&e)) { + SDL_MouseButtonEvent mouseBtn = e.button; + if (mouseBtn.clicks == 1) + { + V2f point; + point.x = mouseBtn.x; + point.y = mouseBtn.y; + if (AABB_Slab(player.pos, point, a)) + { + printf("hit"); + } + else + { + printf("miss"); + } + } PlayerUpdate(&e, &player); if (e.type == SDL_EVENT_QUIT) { diff --git a/code/game/aabb.h b/code/game/aabb.h index 5f9848a..8710d22 100644 --- a/code/game/aabb.h +++ b/code/game/aabb.h @@ -1,17 +1,16 @@ #if !defined(LD_GAME_AABB_H_) #define LD_GAME_AABB_H_ -#include "types.h" +#include "../core/types.h" #include "../core/macros.h" - typedef struct AABB AABB; -struct AABB { +struct AABB +{ V2f pos; V2f size; }; - -function bool AABB_Collide(AABB a, AABB b); -function bool AABB_Point(AABB a, V2f v); - -#endif // LD_GAME_AABB_H_ +function bool AABB_Collide(AABB a, AABB b); +function bool AABB_Point(AABB a, V2f v); +function bool AABB_Slab(V2f origin, V2f point, AABB a); +#endif // LD_GAME_AABB_H_ diff --git a/code/game/impl/aabb.c b/code/game/impl/aabb.c index 3637513..1f3da68 100644 --- a/code/game/impl/aabb.c +++ b/code/game/impl/aabb.c @@ -1,15 +1,36 @@ +#include "math.h" #include "../aabb.h" -#include "../types.h" +#include "../../core/types.h" -bool AABB_Collide(AABB a, AABB b) { +bool AABB_Collide(AABB a, AABB b) +{ bool collision_x = a.pos.x + a.size.x >= b.pos.x && b.pos.x + b.size.x >= a.pos.x; bool collision_y = a.pos.y + a.size.x >= b.pos.y && b.pos.y + b.size.y >= a.pos.y; return collision_x && collision_y; } -bool AABB_Point(AABB a, V2f v) { +bool AABB_Point(AABB a, V2f v) +{ bool collision_x = a.pos.x + a.size.x >= v.x && a.pos.x <= v.x; bool collision_y = a.pos.x + a.size.y >= v.y && a.pos.y <= v.y; return collision_x && collision_y; } +bool AABB_Slab(V2f origin, V2f point, AABB a) +{ + V2f start = a.pos; + V2f finish = {a.pos.x + a.size.x, a.pos.y + a.size.y}; + V2f direction = {origin.x - point.x, origin.y - point.y}; + // x + F32 tLow = (start.x - origin.x) / direction.x; + F32 tHigh = (finish.x - origin.x) / direction.x; + F32 tMin = min(tLow, tHigh); + F32 tMax = max(tLow, tHigh); + // y + tLow = (start.x - origin.x) / direction.x; + tHigh = (finish.x - origin.x) / direction.x; + + tMin = max(tMin, min(tLow, tHigh)); + tMax = min(tMax, max(tLow, tHigh)); + return tMax >= max(0.0, tMin); +} \ No newline at end of file diff --git a/code/game/impl/player.c b/code/game/impl/player.c index 4c26667..ab62250 100644 --- a/code/game/impl/player.c +++ b/code/game/impl/player.c @@ -3,6 +3,7 @@ void PlayerUpdate(SDL_Event *event, Player *player) { SDL_KeyboardEvent key = event->key; + SDL_MouseButtonEvent mouseBtn = event->button; if (key.key == SDLK_W) { player->pos.y += 10; @@ -19,4 +20,9 @@ void PlayerUpdate(SDL_Event *event, Player *player) { player->pos.y -= 10; } + if (mouseBtn.clicks == 1) + { + // shooting + player->bulletsLoaded -= 1; + } } diff --git a/code/game/player.h b/code/game/player.h index b1fb884..8563409 100644 --- a/code/game/player.h +++ b/code/game/player.h @@ -6,6 +6,7 @@ typedef struct Player Player; struct Player { V2f pos; + U32 bulletsLoaded; }; function void PlayerUpdate(SDL_Event *event, Player *player); \ No newline at end of file