Merge branch 'main' of yibble.dev:bulmanator/ld58
This commit is contained in:
@@ -34,3 +34,7 @@ bool AABB_Slab(V2f origin, V2f point, AABB a)
|
||||
|
||||
return tMax >= tMin;
|
||||
}
|
||||
|
||||
V2f AABB_Centre(AABB a) {
|
||||
return V2F(a.pos.x + a.size.x/2, a.pos.y + a.size.y/2);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
#include "game/bandit.h"
|
||||
|
||||
void UpdateBandit(F32 delta, Bandit *bandit, World *world) {
|
||||
if (
|
||||
world->player.controls.shot && AABB_Slab(world->player.pos, world->player.shotPos, bandit->collision) && bandit->currentArea == world->player.currentArea)
|
||||
{
|
||||
printf("You shot the bandit %*.s\n", Sv(bandit->name));
|
||||
bandit->health--;
|
||||
}
|
||||
switch (bandit->mode) {
|
||||
case BANDIT_WAITING:
|
||||
bandit->waitTime+=delta;
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
void PlayerInput(SDL_Event *event, Player *player)
|
||||
{
|
||||
player->controls.shot = false;
|
||||
SDL_KeyboardEvent key = event->key;
|
||||
SDL_MouseButtonEvent mouseBtn = event->button;
|
||||
if(event->type == SDL_EVENT_KEY_DOWN || event->type == SDL_EVENT_KEY_UP) {
|
||||
@@ -42,8 +41,8 @@ void PlayerInput(SDL_Event *event, Player *player)
|
||||
// shooting
|
||||
player->bulletsLoaded -= 1;
|
||||
player->controls.shot = true;
|
||||
player->shotPos = V2F(mouseBtn.x, mouseBtn.y);
|
||||
printf("shot %f %f\n", mouseBtn.x, mouseBtn.y);
|
||||
player->shotPos = player->world->mouseProjected;
|
||||
printf("shot %f %f\n", player->shotPos.x, player->shotPos.y);
|
||||
} else if(player->reloadTimer == 0) {
|
||||
player->reloadTimer = PLAYER_RELOAD_TIME;
|
||||
printf("reloading\n");
|
||||
@@ -52,6 +51,7 @@ void PlayerInput(SDL_Event *event, Player *player)
|
||||
}
|
||||
|
||||
void PlayerUpdate(F32 delta, Player *player) {
|
||||
player->controls.shot = false;
|
||||
V2f dir = V2F(0, 0);
|
||||
if(player->controls.upDown) {
|
||||
dir.y -= 1;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#include "../world.h"
|
||||
#include "../npc.h"
|
||||
#include "../player.h"
|
||||
#include "../aabb.h"
|
||||
#include <SDL3/SDL_events.h>
|
||||
#include "../map.h"
|
||||
|
||||
void UpdateWorld(F32 delta, World *world)
|
||||
{
|
||||
@@ -14,10 +16,12 @@ void UpdateNPCs(F32 delta, World *world)
|
||||
{
|
||||
for (U32 i = 0; i < world->npcCount; i++)
|
||||
{
|
||||
UpdateNPC(delta, &world->npcs[i], world);
|
||||
if(world->player.controls.shot && AABB_Point(world->npcs[i].collision, world->player.shotPos)) {
|
||||
// TODO we need to unproject the mouse location !!!
|
||||
printf("You shot %.*s\n", Sv(world->npcs[i].name));
|
||||
NPC *npc = &world->npcs[i];
|
||||
UpdateNPC(delta, npc, world);
|
||||
if (
|
||||
world->player.controls.shot && AABB_Slab(world->player.pos, world->player.shotPos, npc->collision) && npc->currentArea == world->player.currentArea)
|
||||
{
|
||||
printf("You shot %*.s\n", Sv(world->npcs[i].name));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,12 +32,24 @@ void ProcessEvents(SDL_Event *event, World *world)
|
||||
}
|
||||
|
||||
void RenderWorld(World *world, D_Context *draw) {
|
||||
World_Tile tileTypes[] = {dirt, middlePath, middlePathEdgeTop, middlePathEdgeRight, middlePathEdgeBottom, middlePathEdgeLeft, middlePathCornerTopLeft, middlePathCornerTopRight, middlePathCornerBottomRight, middlePathCornerTurnBottomLeft};
|
||||
for (int i = 0; i < 4800; i++)
|
||||
{
|
||||
D_Rect(draw, (i % 96), __floor(i / 96), .texture = tileTypes[map[i]].tile, .angle = tileTypes[map[i]].rotation);
|
||||
}
|
||||
for(U32 i = 0; i < world->npcCount; i++) {
|
||||
NPC npc = world->npcs[i];
|
||||
D_Rect(draw, npc.collision.pos.x, npc.collision.pos.y, .texture = 1);
|
||||
D_Rect(draw, npc.collision.pos.x, npc.collision.pos.y, .texture = 0, .dim = npc.collision.size);
|
||||
if(npc.currentArea == world->player.currentArea) {
|
||||
V2f drawPos = AABB_Centre(npc.collision);
|
||||
D_Rect(draw, drawPos.x, drawPos.y, .texture = 1);
|
||||
D_Rect(draw, drawPos.x, drawPos.y, .texture = 0, .dim = npc.collision.size, .flags = D_RECT_IGNORE_ASPECT);
|
||||
}
|
||||
}
|
||||
if(world->bandit.currentArea == world->player.currentArea) {
|
||||
V2f drawPos = AABB_Centre(world->bandit.collision);
|
||||
D_Rect(draw, drawPos.x, drawPos.y, .texture = 9);
|
||||
D_Rect(draw, drawPos.x, drawPos.y, .texture = 0, .dim = world->bandit.collision.size, .flags = D_RECT_IGNORE_ASPECT);
|
||||
}
|
||||
D_Rect(draw, world->bandit.collision.pos.x, world->bandit.collision.pos.y, .texture = 9);
|
||||
D_Rect(draw, world->player.pos.x, world->player.pos.y, .texture = 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user