-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkeys.c
71 lines (67 loc) · 2.16 KB
/
keys.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
#include "cub3d.h"
void handle_keys(t_info *info, int keys)
{
double oldDirX;
double oldPlaneX;
double norm;
double norm2;
if (keys == 1)
{
norm = -info->rotSpeed;
oldDirX = info->dirX;
info->dirX = info->dirX * cos(norm) - info->dirY * sin(norm);
info->dirY = oldDirX * sin(norm) + info->dirY * cos(norm);
oldPlaneX = info->planeX;
info->planeX = info->planeX * cos(norm) - info->planeY * sin(norm);
info->planeY = oldPlaneX * sin(norm) + info->planeY * cos(norm);
}
if (keys == 2)
{
norm2 = info->rotSpeed;
oldDirX = info->dirX;
info->dirX = info->dirX * cos(norm2) - info->dirY * sin(norm2);
info->dirY = oldDirX * sin(norm2) + info->dirY * cos(norm2);
oldPlaneX = info->planeX;
info->planeX = info->planeX * cos(norm2) - info->planeY * sin(norm2);
info->planeY = oldPlaneX * sin(norm2) + info->planeY * cos(norm2);
}
}
void handle_keys_2(t_info *info, int keys)
{
if (info->keys.key_w)
{
info->norm2 = info->posX + info->dirX * info->moveSpeed;
if (info->map[(int)(info->norm2)][(int)(info->posY)] == '0'
|| info->map[(int)(info->norm2)][(int)(info->posY)] == '2')
info->posX += info->dirX * info->moveSpeed;
info->norm2 = info->posY + info->dirY * info->moveSpeed;
if (info->map[(int)(info->posX)][(int)(info->norm2)] == '0'
|| info->map[(int)(info->posX)][(int)(info->norm2)] == '2')
info->posY += info->dirY * info->moveSpeed;
}
if (info->keys.key_s)
{
info->norm2 = info->posX - info->dirX * info->moveSpeed;
if (info->map[(int)(info->norm2)][(int)(info->posY)] == '0'
|| info->map[(int)(info->norm2)][(int)(info->posY)] == '2')
info->posX -= info->dirX * info->moveSpeed;
info->norm2 = info->posY - info->dirY * info->moveSpeed;
if (info->map[(int)(info->posX)][(int)(info->norm2)] == '0'
|| info->map[(int)(info->posX)][(int)(info->norm2)] == '2')
info->posY -= info->dirY * info->moveSpeed;
}
}
int key_hook(t_info *info)
{
if (info->keys.key_w)
handle_keys_2(info, 3);
if (info->keys.key_s)
handle_keys_2(info, 4);
if (info->keys.key_d || info->keys.key_right)
handle_keys(info, 1);
if (info->keys.key_a || info->keys.key_left)
handle_keys(info, 2);
if (info->keys.key_esc)
exit(0);
return (0);
}