]> git.lizzy.rs Git - shadowclad.git/blobdiff - src/game/player.c
Implement rudimentary player movement; fix geometry logic bugs
[shadowclad.git] / src / game / player.c
index ed0dab919b5b5abb0fc2a5eefd780a1f3c68d4d5..560a044b3fa5d8c20bccfb690de4ffb1e07c3393 100644 (file)
@@ -4,10 +4,14 @@
 #include "engine/render.h"
 
 Scene* playerCharacter;
+static Transform movementDirectionTransform;
 
 
 
 void initPlayer() {
+       movementDirectionTransform = identity();
+       rotate(&movementDirectionTransform, (Vector3D) { 0.0f, 1.0f, 0.0f }, - TAU / 8.0f);
+
        playerCharacter = newScene();
        cameraAnchor = playerCharacter;
        playerCharacter->solid = importSolid("assets/playercharacter.3ds");
@@ -19,8 +23,17 @@ void spawnPlayer(Transform transform) {
 }
 
 void playerMovementInput(float x, float y) {
-       Transform rotation = identity();
-       rotate(&rotation, (Vector3D) { 0.0f, 1.0f, 0.0f }, TAU / 8.0f);
-       Vector3D movementDirection = (Vector3D) { x, 0.0f, -y };
-       movementDirection = normalized(applyTransform(&rotation, movementDirection));
+       if (!playerCharacter) {
+               return;
+       }
+
+       Vector3D direction = (Vector3D) { x, 0.0f, -y };
+       direction = normalized(
+               applyTransform(movementDirectionTransform, direction));
+       float velocity = 1.0f;
+       Vector3D movement = { direction.x * velocity,
+                             direction.y * velocity,
+                             direction.z * velocity };
+
+       translate(&(playerCharacter->transform), movement);
 }