diff options
| author | nathan <nathansmith@disroot.org> | 2026-01-07 02:57:23 +0000 |
|---|---|---|
| committer | nathan <nathansmith@disroot.org> | 2026-01-07 02:57:23 +0000 |
| commit | 382cb08822808f57902f67a842259e64afb33e72 (patch) | |
| tree | ef721fc67335a23bd8a6a6181f7c5db16b23c66b | |
| parent | 63171bd3d0f44dc3a012bb92296ecf017cc27a66 (diff) | |
| download | FindThings-382cb08822808f57902f67a842259e64afb33e72.tar.gz FindThings-382cb08822808f57902f67a842259e64afb33e72.tar.bz2 FindThings-382cb08822808f57902f67a842259e64afb33e72.zip | |
Better bobbling
| -rw-r--r-- | src/player.c | 43 | ||||
| -rw-r--r-- | src/settings.c | 7 | ||||
| -rw-r--r-- | src/settings.h | 1 |
3 files changed, 29 insertions, 22 deletions
diff --git a/src/player.c b/src/player.c index bad1921..c3e9119 100644 --- a/src/player.c +++ b/src/player.c @@ -33,9 +33,9 @@ Player createPlayer() // Fake physics, distance from ground. void updatePlayerHeight(Player* player, Game* game) { - float height = getWorldHeightAtLocation( - &game->world, player->position.x, player->position.z) + PLAYER_HEIGHT; - player->position.y = height; + player->position.y = getWorldHeightAtLocation( + &game->world, player->position.x, player->position.z) + + PLAYER_HEIGHT / 2.0; } void updatePlayerLookingAround(Player* player, Game* game) @@ -224,9 +224,9 @@ void updatePlayerBobble(Player* player, const Settings* settings) Vector2 bobbleVector = Vector2Rotate((Vector2){offset, offset}, player->cameraAngle.x); - player->camera.target.x += bobbleVector.x; - player->camera.target.y += cosf(player->bobble) * settings->bobbleAmount; - player->camera.target.z += bobbleVector.y; + player->camera.position.x += bobbleVector.x; + player->camera.position.y += cosf(player->bobble) * settings->bobbleAmount; + player->camera.position.z += bobbleVector.y; } void playerApplyVelocity(Player* player) @@ -242,24 +242,25 @@ void playerApplyBoundingBox(Player* player) player->box.max = Vector3Add(player->box.max, player->position); } -void playerApplyCamera(Player* player) +void playerApplyCamera(Player* player, const Settings* settings) { Camera* camera = &player->camera; camera->position = player->position; - camera->target = Vector3Add(player->position, player->direction); + camera->position.y += PLAYER_HEIGHT / 2.0; + + if (settings->isBobbleEnabled) + { + updatePlayerBobble(player, settings); + } + + camera->target = Vector3Add(camera->position, player->direction); } void updatePlayerMovement(Player* player, Game* game) { - Camera* camera = &player->camera; Vector2* cameraAngle = &player->cameraAngle; Settings* settings = &game->settings; - if (!game->isCursorEnabled) - { - updatePlayerLookingAround(player, game); - } - // Walking around. player->velocity = (Vector3){0.0, 0.0, 0.0}; bool isWalking = false; @@ -289,7 +290,7 @@ void updatePlayerMovement(Player* player, Game* game) isWalking = true; } - // Set drift. + // Set drift direction. if (isWalking) { player->driftDirection = player->velocity; @@ -425,6 +426,11 @@ void playerUpdateSelectedEntity(Player* player, WorldUID uid, Game* game) void updatePlayer(Player* player, Game* game) { // NOTE: Order of calls is important. + + if (!game->isCursorEnabled) + { + updatePlayerLookingAround(player, game); + } updatePlayerMovement(player, game); @@ -439,13 +445,12 @@ void updatePlayer(Player* player, Game* game) playerApplyVelocity(player); updatePlayerHeight(player, game); playerApplyBoundingBox(player); - playerApplyCamera(player); - updatePlayerBobble(player, &game->settings); + playerApplyCamera(player, &game->settings); - DrawBoundingBox(player->box, YELLOW); + //DrawBoundingBox(player->box, YELLOW); Ray ray = (Ray){ - .position = player->position, + .position = player->camera.position, .direction = player->direction }; diff --git a/src/settings.c b/src/settings.c index 1c31746..d31c7cc 100644 --- a/src/settings.c +++ b/src/settings.c @@ -8,7 +8,7 @@ Settings defaultSettings() .screenWidth = 596, .screenHeight = 447, .fov = 90.0, - .maxFPS = 60, + .maxFPS = 0, .showFPSDefault = true, .backgroundColor = (Color){74, 42, 74, 255}, .useBackgroundTexture = true, @@ -23,8 +23,9 @@ Settings defaultSettings() .crossHairSize = 8.0, .crossHairThickness = 3.0, .crossHairColor = BLUE, - .bobbleRate = 0.4, - .bobbleAmount = 0.01, + .isBobbleEnabled = true, + .bobbleRate = 1.0, + .bobbleAmount = 0.07, .playerAcceleration = 15.0, .isMapPreviewEnabledDefault = true, .mapPreviewWidth = 300.0, diff --git a/src/settings.h b/src/settings.h index 04ad920..9b04e0a 100644 --- a/src/settings.h +++ b/src/settings.h @@ -39,6 +39,7 @@ typedef struct { Color crossHairColor; // Player movement. + bool isBobbleEnabled; float bobbleRate; float bobbleAmount; float playerAcceleration; |
