-
Notifications
You must be signed in to change notification settings - Fork 0
/
movement.c
116 lines (109 loc) · 3.31 KB
/
movement.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/* ************************************************************************** */
/* */
/* :::::::: */
/* movement.c :+: :+: */
/* +:+ */
/* By: cschuijt <[email protected]> +#+ */
/* +#+ */
/* Created: 2022/12/19 20:33:19 by cschuijt #+# #+# */
/* Updated: 2022/12/19 20:33:19 by cschuijt ######## odam.nl */
/* */
/* ************************************************************************** */
#include "so_long.h"
void movement_animation_wrapper(t_map *map)
{
static size_t clock = 0;
size_t current_clock;
current_clock = mlx_get_time() / MOVE_ANIMATION_INTERVAL;
if (current_clock > clock)
{
clock = current_clock;
map->movement_clock++;
if (map->movement_clock >= 8)
{
finish_moving_and_run_checks(map);
return ;
}
if (map->player->move_direction == dir_up)
animate_player_movement_up(map);
else if (map->player->move_direction == dir_right)
animate_player_movement_right(map);
else if (map->player->move_direction == dir_down)
animate_player_movement_down(map);
else if (map->player->move_direction == dir_left)
animate_player_movement_left(map);
patrol_movement_animation_wrapper(map);
}
}
void animate_player_movement_up(t_map *map)
{
if (map->movement_clock < 4)
{
map->player->image->instances[0].y -= 8;
map->player->image->pixels = map->player_sprites[16 + \
map->player->facing_offset + map->movement_clock];
}
else
{
map->player->image->pixels = map->player_sprites[24 + \
map->player->facing_offset + (map->movement_clock % 4)];
}
if (map->movement_clock == 5)
{
map->player->pos -= map->width;
}
}
void animate_player_movement_right(t_map *map)
{
if (map->movement_clock < 4)
{
map->player->image->instances[0].x += 8;
map->player->image->pixels = map->player_sprites[16 + \
map->player->facing_offset + map->movement_clock];
}
else
{
map->player->image->pixels = map->player_sprites[24 + \
map->player->facing_offset + (map->movement_clock % 4)];
}
if (map->movement_clock == 5)
{
map->player->pos += 1;
}
}
void animate_player_movement_down(t_map *map)
{
if (map->movement_clock < 4)
{
map->player->image->instances[0].y += 8;
map->player->image->pixels = map->player_sprites[16 + \
map->player->facing_offset + map->movement_clock];
}
else
{
map->player->image->pixels = map->player_sprites[24 + \
map->player->facing_offset + (map->movement_clock % 4)];
}
if (map->movement_clock == 5)
{
map->player->pos += map->width;
}
}
void animate_player_movement_left(t_map *map)
{
if (map->movement_clock < 4)
{
map->player->image->instances[0].x -= 8;
map->player->image->pixels = map->player_sprites[16 + \
map->player->facing_offset + map->movement_clock];
}
else
{
map->player->image->pixels = map->player_sprites[24 + \
map->player->facing_offset + (map->movement_clock % 4)];
}
if (map->movement_clock == 5)
{
map->player->pos -= 1;
}
}