Coverage report for server


src/
File: src/commands/ai/take.c
Date: 2024-06-25 10:57:05
Lines:
40/43
93.0%
Functions:
4/4
100.0%
Branches:
22/34
64.7%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2024
3 ** zappy
4 ** File description:
5 ** take.c
6 */
7
8 #include "server.h"
9
10 static const struct {
11 char *name;
12 object_t type;
13 } object_handlers[] = {
14 {"food", FOOD},
15 {"linemate", LINEMATE},
16 {"deraumere", DERAUMERE},
17 {"sibur", SIBUR},
18 {"mendiane", MENDIANE},
19 {"phiras", PHIRAS},
20 {"thystame", THYSTAME},
21 };
22
23 2 static void add_element_to_inventory(client_t *c, object_t object)
24 {
25
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 2 times.
16 for (size_t i = 0; i < 7; i++) {
26
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 12 times.
14 if (object_handlers[i].type == object) {
27 2 c->inventory.food = object == FOOD
28
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 ? c->inventory.food + 1 : c->inventory.food;
29 2 c->inventory.linemate = object == LINEMATE
30
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.linemate + 1 : c->inventory.linemate;
31 2 c->inventory.deraumere = object == DERAUMERE
32
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.deraumere + 1 : c->inventory.deraumere;
33 2 c->inventory.sibur = object == SIBUR
34
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.sibur + 1 : c->inventory.sibur;
35 2 c->inventory.mendiane = object == MENDIANE
36
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.mendiane + 1 : c->inventory.mendiane;
37 2 c->inventory.phiras = object == PHIRAS
38
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.phiras + 1 : c->inventory.phiras;
39 2 c->inventory.thystame = object == THYSTAME
40
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 ? c->inventory.thystame + 1 : c->inventory.thystame;
41 }
42 }
43 2 }
44
45 2 static bool does_object_exist_on_tile(tile_t *tile, object_t object)
46 {
47
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 for (size_t i = 0; i < tile->num_objects; i++) {
48
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (tile->objects[i] == object)
49 return true;
50 }
51 return false;
52 }
53
54 3 static object_t get_object_from_string(char *object_string)
55 {
56 object_t object = -1;
57
58
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 1 times.
10 for (size_t i = 0; i < 7; i++) {
59
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 7 times.
9 if (strcmp(object_handlers[i].name, object_string) == 0) {
60 2 object = object_handlers[i].type;
61 2 break;
62 }
63 }
64 3 return object;
65 }
66
67 3 void take(client_t *client, server_t *s)
68 {
69 3 tile_t *tile = &s->map[client->y * s->proprieties.width + client->x];
70 object_t object;
71
72
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 if (client->commands[1] == NULL) {
73 dprintf(client->fd, "ko\n");
74 return;
75 }
76 3 object = get_object_from_string(client->commands[1]);
77
3/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
3 if ((int)object == -1 || object == PLAYER || object == EMPTY) {
78 1 dprintf(client->fd, "ko\n");
79 1 return;
80 }
81
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 if (does_object_exist_on_tile(tile, object)) {
82 2 add_element_to_inventory(client, object);
83 2 remove_element_from_map(s, client->x, client->y, object);
84 2 handle_response(&client->payload, "ok\n");
85 2 message_to_graphicals(s, "pgt %d %d\n", client->id, object);
86 2 client_time_handler(client, TAKE);
87 } else
88 dprintf(client->fd, "ko\n");
89 }
90