2025-10-04 15:53:55 +01:00
|
|
|
#include "../player.h"
|
2025-10-05 18:05:01 +01:00
|
|
|
#include <SDL3/SDL_events.h>
|
2025-10-05 14:42:19 +01:00
|
|
|
#include <SDL3/SDL_keycode.h>
|
2025-10-05 21:05:29 +01:00
|
|
|
#include <stdio.h>
|
2025-10-04 15:53:55 +01:00
|
|
|
|
2025-10-05 18:05:01 +01:00
|
|
|
void PlayerInput(SDL_Event *event, Player *player)
|
2025-10-04 15:53:55 +01:00
|
|
|
{
|
2025-10-04 17:36:47 +01:00
|
|
|
SDL_KeyboardEvent key = event->key;
|
|
|
|
|
SDL_MouseButtonEvent mouseBtn = event->button;
|
2025-10-05 18:05:01 +01:00
|
|
|
if(event->type == SDL_EVENT_KEY_DOWN || event->type == SDL_EVENT_KEY_UP) {
|
|
|
|
|
bool val = event->type == SDL_EVENT_KEY_DOWN;
|
|
|
|
|
switch (key.key)
|
|
|
|
|
{
|
|
|
|
|
case SDLK_W:
|
|
|
|
|
{
|
|
|
|
|
player->controls.upDown = val;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case SDLK_A:
|
|
|
|
|
{
|
|
|
|
|
player->controls.leftDown = val;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case SDLK_D:
|
|
|
|
|
{
|
|
|
|
|
player->controls.rightDown = val;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case SDLK_S:
|
|
|
|
|
{
|
|
|
|
|
player->controls.downDown = val;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-04 17:36:47 +01:00
|
|
|
}
|
2025-10-05 21:05:29 +01:00
|
|
|
if (
|
|
|
|
|
event->type == SDL_EVENT_MOUSE_BUTTON_DOWN
|
|
|
|
|
&& mouseBtn.button == SDL_BUTTON_LEFT
|
|
|
|
|
) {
|
|
|
|
|
if(player->bulletsLoaded > 0) {
|
|
|
|
|
// shooting
|
|
|
|
|
player->bulletsLoaded -= 1;
|
|
|
|
|
player->controls.shot = true;
|
2025-10-05 22:35:34 +01:00
|
|
|
player->shotPos = player->world->mouseProjected;
|
|
|
|
|
printf("shot %f %f\n", player->shotPos.x, player->shotPos.y);
|
2025-10-05 21:05:29 +01:00
|
|
|
} else if(player->reloadTimer == 0) {
|
|
|
|
|
player->reloadTimer = PLAYER_RELOAD_TIME;
|
|
|
|
|
printf("reloading\n");
|
|
|
|
|
};
|
|
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PlayerUpdate(F32 delta, Player *player) {
|
2025-10-05 23:36:50 +01:00
|
|
|
player->controls.shot = false;
|
2025-10-05 18:05:01 +01:00
|
|
|
V2f dir = V2F(0, 0);
|
2025-10-06 17:45:58 +01:00
|
|
|
if(player->health == 0){
|
|
|
|
|
printf("dead :(");
|
|
|
|
|
player->health = 3;
|
|
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
if(player->controls.upDown) {
|
|
|
|
|
dir.y -= 1;
|
2025-10-04 17:36:47 +01:00
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
if(player->controls.downDown) {
|
|
|
|
|
dir.y += 1;
|
2025-10-04 17:36:47 +01:00
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
if(player->controls.leftDown) {
|
|
|
|
|
dir.x -= 1;
|
2025-10-04 17:36:47 +01:00
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
if(player->controls.rightDown) {
|
|
|
|
|
dir.x += 1;
|
2025-10-04 17:36:47 +01:00
|
|
|
}
|
2025-10-05 21:05:29 +01:00
|
|
|
if(player->reloadTimer > 0) {
|
|
|
|
|
player->reloadTimer-=delta;
|
|
|
|
|
if(player->reloadTimer <= 0) {
|
|
|
|
|
player->bulletsLoaded = PLAYER_BULLET_COUNT;
|
|
|
|
|
player->reloadTimer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-05 18:05:01 +01:00
|
|
|
dir = V2f_Scale(NormaliseV2F(dir), PLAYER_SPEED*delta);
|
2025-10-06 17:30:49 +01:00
|
|
|
player->collision.pos.x += dir.x;
|
|
|
|
|
player->collision.pos.y += dir.y;
|
2025-10-04 15:53:55 +01:00
|
|
|
}
|