aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornathan <nathansmith@disroot.org>2026-01-07 02:57:23 +0000
committernathan <nathansmith@disroot.org>2026-01-07 02:57:23 +0000
commit382cb08822808f57902f67a842259e64afb33e72 (patch)
treeef721fc67335a23bd8a6a6181f7c5db16b23c66b
parent63171bd3d0f44dc3a012bb92296ecf017cc27a66 (diff)
downloadFindThings-382cb08822808f57902f67a842259e64afb33e72.tar.gz
FindThings-382cb08822808f57902f67a842259e64afb33e72.tar.bz2
FindThings-382cb08822808f57902f67a842259e64afb33e72.zip
Better bobbling
-rw-r--r--src/player.c43
-rw-r--r--src/settings.c7
-rw-r--r--src/settings.h1
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;