A RPG I'm messing with made in Raylib.
1#include "../../include/player_state/walk.h"
2
3#include "../../include/player_state/default.h"
4
5#include "../../include/player.h"
6#include "../../include/raylib.h"
7
8static void player_state_walk_update(PlayerState *state, Player *player)
9{
10 if (IsKeyDown(KEY_LEFT_SHIFT))
11 {
12 player->speed = 24.0f;
13 }
14 else
15 {
16 player->speed = 12.0f;
17 }
18
19 if (IsKeyDown(KEY_UP))
20 {
21 player->texture = player->textures[PLAYER_TEXTURE_WALK_BACKWARD];
22 }
23 else if (IsKeyDown(KEY_DOWN))
24 {
25 player->texture = player->textures[PLAYER_TEXTURE_WALK_FORWARD];
26 }
27 else if (IsKeyDown(KEY_RIGHT))
28 {
29 player->texture = player->textures[PLAYER_TEXTURE_WALK_RIGHT];
30 }
31 else if (IsKeyDown(KEY_LEFT))
32 {
33 player->texture = player->textures[PLAYER_TEXTURE_WALK_LEFT];
34 }
35
36 if (IsKeyDown(KEY_RIGHT))
37 {
38 player->control.x = 1;
39 }
40 else if (IsKeyDown(KEY_LEFT))
41 {
42 player->control.x = -1;
43 }
44 else
45 {
46 player->control.x = 0;
47 }
48
49 if (IsKeyDown(KEY_DOWN))
50 {
51 player->control.y = 1;
52 }
53 else if (IsKeyDown(KEY_UP))
54 {
55 player->control.y = -1;
56 }
57 else
58 {
59 player->control.y = 0;
60 }
61
62 Vector2 normalized = Vector2Normalize(player->control);
63
64 player->velocity = Vector2Add(
65 player->velocity, Vector2Scale(normalized, player->speed));
66
67 player->position.x += player->velocity.x * GetFrameTime();
68 player->position.y += player->velocity.y * GetFrameTime();
69
70 player->velocity = Vector2Scale(player->velocity, player->friction);
71
72 if (Vector2Length(player->velocity) < 0.1f)
73 {
74 player_state_transition_to_default(state, player);
75 }
76}
77
78void player_state_transition_to_walk(PlayerState *state, Player *player)
79{
80 state->name = "Walk";
81 state->update = player_state_walk_update;
82}