aboutsummaryrefslogtreecommitdiffstats
path: root/src/player.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/player.c')
-rw-r--r--src/player.c43
1 files changed, 24 insertions, 19 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
};