diff options
author | nathan <nathansmith@disroot.org> | 2025-07-04 13:00:08 +0000 |
---|---|---|
committer | nathan <nathansmith@disroot.org> | 2025-07-04 13:00:08 +0000 |
commit | 2b2b69ee31f00aa46ab6baa967e12437ce7334d1 (patch) | |
tree | 1ba7fd19c30bb33ef20f55afc84ccfff30460969 /src/player.c | |
parent | de3a92fb2bde8cbec688f788c53f7ba52d6a723a (diff) | |
download | FindThings-2b2b69ee31f00aa46ab6baa967e12437ce7334d1.tar.gz FindThings-2b2b69ee31f00aa46ab6baa967e12437ce7334d1.tar.bz2 FindThings-2b2b69ee31f00aa46ab6baa967e12437ce7334d1.zip |
Heightmap, player, and more concepts
Diffstat (limited to 'src/player.c')
-rw-r--r-- | src/player.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/player.c b/src/player.c new file mode 100644 index 0000000..ec6eaf2 --- /dev/null +++ b/src/player.c @@ -0,0 +1,75 @@ +#include "player.h" +#include "game.h" + +Player createPlayer() +{ + return (Player){ + .position = Vector3Zero(), + .direction = (Vector3){0.0, 0.0, 0.0}, + .velocity = Vector3Zero(), + .camera = (Camera){ + .position = (Vector3){0.0, 0.0, 0.0}, + .target = Vector3Zero(), + .up = (Vector3){0.0, 1.0, 0.0}, + .fovy = 100, + .projection = CAMERA_PERSPECTIVE + }, + .cameraAngle = Vector2Zero() + }; +} + +// TODO: move magic numbers to settings +void updatePlayer(Player* player, Game* game) +{ + Camera* camera = &player->camera; + Vector2* cameraAngle = &player->cameraAngle; + Settings* settings = &game->settings; + + // Get mouse speed. + Vector2 mouseSpeed = Vector2Scale(GetMouseDelta(), settings->mouseSpeed); + mouseSpeed = Vector2Scale(mouseSpeed, 1.0 / (PI * 2.0)); + + // Update camera angle. + *cameraAngle = Vector2Add(*cameraAngle, mouseSpeed); + cameraAngle->x = Wrap(cameraAngle->x, -PI, PI); + cameraAngle->y = Clamp(cameraAngle->y, -PI / 2.5, PI / 2.5); + + // Set player direction + Matrix matrix = MatrixRotateXYZ( + (Vector3){-cameraAngle->y, cameraAngle->x, 0.0}); + player->direction = (Vector3){matrix.m2, matrix.m6, matrix.m10}; + + // Player movement. + player->velocity = Vector3Zero(); + + if (IsKeyDown(settings->forwardKey)) + { + player->velocity.z += cosf(cameraAngle->x); + player->velocity.x += -sinf(cameraAngle->x); + } + if (IsKeyDown(settings->leftKey)) + { + player->velocity.z += cosf(cameraAngle->x - (PI / 2.0)); + player->velocity.x += -sinf(cameraAngle->x - (PI / 2.0)); + } + if (IsKeyDown(settings->backwardKey)) + { + player->velocity.z += -cosf(cameraAngle->x); + player->velocity.x += sinf(cameraAngle->x); + } + if (IsKeyDown(settings->rightKey)) + { + player->velocity.z += cosf(cameraAngle->x + (PI / 2.0)); + player->velocity.x += -sinf(cameraAngle->x + (PI / 2.0)); + } + + player->velocity = Vector3Scale(player->velocity, 5.0); + + // Apply velocity + player->position = Vector3Add( + player->position, Vector3Scale(player->velocity, GetFrameTime())); + + // Apply camera. + camera->position = player->position; + camera->target = Vector3Add(player->position, player->direction); +} |