]> git.lizzy.rs Git - shadowclad.git/blob - src/game/player.c
Implement rudimentary player movement; fix geometry logic bugs
[shadowclad.git] / src / game / player.c
1 #include "player.h"
2
3 #include "engine/asset.h"
4 #include "engine/render.h"
5
6 Scene* playerCharacter;
7 static Transform movementDirectionTransform;
8
9
10
11 void initPlayer() {
12         movementDirectionTransform = identity();
13         rotate(&movementDirectionTransform, (Vector3D) { 0.0f, 1.0f, 0.0f }, - TAU / 8.0f);
14
15         playerCharacter = newScene();
16         cameraAnchor = playerCharacter;
17         playerCharacter->solid = importSolid("assets/playercharacter.3ds");
18 }
19
20 void spawnPlayer(Transform transform) {
21         playerCharacter->transform = transform;
22         reparentScene(playerCharacter, currentScene);
23 }
24
25 void playerMovementInput(float x, float y) {
26         if (!playerCharacter) {
27                 return;
28         }
29
30         Vector3D direction = (Vector3D) { x, 0.0f, -y };
31         direction = normalized(
32                 applyTransform(movementDirectionTransform, direction));
33         float velocity = 1.0f;
34         Vector3D movement = { direction.x * velocity,
35                               direction.y * velocity,
36                               direction.z * velocity };
37
38         translate(&(playerCharacter->transform), movement);
39 }