my_rpg documentation 1.0.0
Loading...
Searching...
No Matches
csfml.h
1/*
2** EPITECH PROJECT, 2023
3** Libmy
4** File description:
5** Store libmy functions prototypes
6*/
7
8
9#ifndef CSFML_H
10 #define CSFML_H
11
12 #include <SFML/Graphics.h>
13 #include <SFML/System.h>
14 #include <SFML/Audio.h>
15 #include <stdbool.h>
16 #include <malloc.h>
17 #include <stdlib.h>
18 #include <time.h>
19 #include <threads.h>
20 #include <unistd.h>
21 #include <fcntl.h>
22 #include <math.h>
23 #include <string.h>
24 #include "mylist.h"
25 #include "my.h"
26 #include <stdarg.h>
27 #include <errno.h>
28 #include <string.h>
29
30 #define V2F (sfVector2f)
31 #define TIME(x) sfClock_getElapsedTime(x).microseconds / 1000000.0
32 #define CLOCKMICRO(clock) sfTime_asMilliseconds(sfClock_restart(clock))
33
34 #define BAR_SIZEW PLAYER_DIMO.x
35 #define BAR_SIZEH 10
36 #define XP_GIVEN 13
37 #define XP_RATIO 1.3
38
39 #define MAX(a, b) ((a > b) ? a : b)
40 #define MIN(a, b) ((a < b) ? a : b)
41 #define TEXTURE "assets/map.png"
42
43 #define EMPTY '0'
44 #define WALL '1'
45 #define MAP_SCALE 4
46
47 #define FONT "assets/mc.otf"
48
49 #define GREEN sfColor_fromRGB(15, 169, 88)
50 #define RED sfColor_fromRGB(139, 0, 0)
51 #define BLUE sfColor_fromRGB(30, 144, 255)
52
53 #define LEFTM (get_keys()->keys[0])
54 #define LEFTK (get_keys()->keys[get_bind()->left])
55 #define RIGHTK (get_keys()->keys[get_bind()->right])
56 #define UPK (get_keys()->keys[get_bind()->up])
57 #define DOWNK (get_keys()->keys[get_bind()->down])
58 #define ATTACKK (get_keys()->keys[get_bind()->attack])
59 #define SLOT1K (get_keys()->keys[get_bind()->inv1])
60 #define SLOT2K (get_keys()->keys[get_bind()->inv2])
61 #define SLOT3K (get_keys()->keys[get_bind()->inv3])
62 #define HITBOXK (get_keys()->keys[get_bind()->hitbox])
63 #define XPK (get_keys()->keys[get_bind()->xp])
64 #define ESCAPEK (get_keys()->keys[37])
65 #define PAUSEK (get_keys()->keys[get_bind()->pause])
66 #define HITK (get_keys()->keys[get_bind()->hit])
67 #define HEALK (get_keys()->keys[get_bind()->heal])
68 #define PASSKEYK (get_keys()->keys[get_bind()->pass])
69 #define INTERACTK (get_keys()->keys[get_bind()->interact])
70 #define INVENTORYK (get_keys()->keys[get_bind()->inv])
71
72 #define RANDINT(min, max) (rand() % (max - min + 1) + min)
73 #define MIN_INT -2147483648
74 #define MAX_INT 2147483647
75 #define CASE_SIZE (32 * MAP_SCALE)
76 //#define SKIP(x) if (x) continue
77
78 #define MUSIC_INTRO "assets/intro.ogg"
79 #define MUSIC_MENU "assets/menu.ogg"
80 #define MUSIC_GAME "assets/game.ogg"
81
82 #define SOUND_DAMAGE "assets/hurt.ogg"
83 #define SOUND_HEAL "assets/heal.ogg"
84 #define SOUND_LEVELUP "assets/levelup.ogg"
85 #define SOUND_LOOT "assets/loot.ogg"
86
87 #define SOUND_DEAD_GLADIATOR "assets/dead_gladiator.ogg"
88 #define SOUND_DEAD_MIMIC "assets/dead_mimic.ogg"
89 #define SOUND_DEAD_MONSTER "assets/dead_monster.ogg"
90 #define SOUND_HIT_GLADIATOR "assets/hit_gladiator.ogg"
91 #define SOUND_HIT_MIMIC "assets/hit_mimic.ogg"
92 #define SOUND_HIT_MONSTER "assets/hit_monster.ogg"
93 #define SOUND_IDLE_MONSTER "assets/idle_monster.ogg"
94
95
96typedef enum {
97 LEFT_M,
98 TOP_M,
99 RIGHT_M,
100 DOWN_M
101} collision_e_t;
102
103typedef enum {
104 DUNGEON,
105 MAP
106} map_type_e_t;
107
108typedef enum {
109 INTRO,
110 MENU,
111 MAIN,
112 PAUSE,
113 SETTINGS,
114 BIND,
115 EXIT,
116} scene_e_t;
117
118typedef enum {
119 RELEASE,
120 PRESSED,
121 DISABLED,
122} button_e_t;
123
124typedef enum {
125 PLAYER,
126 MOB,
127 NPC,
128 OBJECT,
129 DECOR,
130 ITEM,
131 CUSTOM,
132} entity_type_e_t;
133
134typedef enum {
135 NONE,
136 LEFT,
137 RIGHT,
138 ATK,
139} player_orientation_e_t;
140
141typedef enum {
142 STAND,
143 MOVE,
144 ATTACK,
145 DEAD,
146 DISAPPEAR,
147} orientation_e_t;
148
149typedef enum {
150 GLADIATOR,
151 GHOUL,
152 JAR_MIMIC,
153 DEMON,
154 CHEST_MIMIC,
155 BARREL_MIMIC
156} mob_e_t;
157
158typedef enum {
159 ATK_UP,
160 DEF_UP,
161 HP_UP,
162 SPD_UP,
163 NOTHING,
164 SOMETHING,
165} action_player_e_t;
166
167typedef struct {
168 unsigned char *binding;
169 unsigned char left;
170 unsigned char right;
171 unsigned char up;
172 unsigned char down;
173 unsigned char attack;
174 unsigned char pause;
175 unsigned char interact;
176 unsigned char inv1;
177 unsigned char inv2;
178 unsigned char inv3;
179 unsigned char inv;
180 unsigned char hitbox;
181 unsigned char hit;
182 unsigned char heal;
183 unsigned char pass;
184 unsigned char xp;
185} bind_t;
186
187typedef struct {
188 unsigned char keys[102];
189} keys_t;
190
191typedef struct path_s {
192 sfVector2f position;
193 float g_score; // Coût depuis le noeuds de départ jusqu'à ce node
194 float f_score; // Coût total estimé depuis le départ
195 // jusqu'à l'arrivée en passant par ce node
196 float h_score; // Distance euclidienne entre le noeud et la fin
197 struct path_s *prev; // Noeud précédent dans le chemin optimal
198} path_t;
199
200typedef struct path_info_s {
201 sfVector2f start;
202 sfVector2f end;
203 int start_val;
204 int nb_paths;
205 nodes_t *possible_paths;
206 path_t *tmp;
207 nodes_t *visited;
209
210
211typedef struct {
212 int current;
213 orientation_e_t orientation;
214 sfClock *animation_clock;
215 int max_stand;
216 int max_move;
217 int max_attack;
218 int max_dead;
219 int hit_frame;
221
222typedef struct mob_s {
223 sfText *text;
224 float hp;
225 int attack;
226 int defense;
227 int xp_to_drop;
228 int is_hit;
229 int speed;
230 int range;
231 float resistance;
232 animation_t animation;
233 float sound_clock;
234 char *idle_sound;
235 char *hit_sound;
236 char *dead_sound;
237} mob_t;
238
239typedef struct {
240 sfSprite *sprite;
241 sfVector2f origin;
242 sfVector2f position;
243 sfVector2f scale;
244 sfVector2f move;
245 sfIntRect rect;
246 sfIntRect initial_rect;
247 float clock;
248 float hit_clock;
249 sfMusic *sound;
250 void *hitbox;
251
252 entity_type_e_t type;
253 void *entity_struct;
254 char *id;
255 int *offset_rect;
256} entity_t;
257
258typedef struct item_s {
259 bool on_ground;
260 bool current;
261
262 float attack;
263 float defense;
264 float speed;
265 float hp;
266
267 int index;
268 int (*interaction)(entity_t *);
269} item_t;
270
271typedef struct object_s {
272 int (*interaction)(entity_t *);
273} object_t;
274
275typedef struct npc_s {
276 int is_interacting;
277 int (*action_npc)(entity_t *);
278} npc_t;
279
280typedef struct map_s {
281 int type;
282 int mob;
283 int size;
284 int floor;
285 char **map;
286 sfSprite *tile;
287 sfImage *color_map;
288} map_t;
289
290
291typedef struct player_s {
292 float hp;
293 float max_hp;
294 float max_hpw;
295 int is_dead;
296
297 float attack;
298 float max_attackw;
299
300 int is_attacking;
301 int is_hit;
302
303 float defense;
304 float max_defensew;
305
306 float speed;
307 float max_speedw;
308
309 int xp_to_next_level;
310 int xp;
311 int level;
312 int old_level;
313
314 int loot;
315 int (*action)(action_player_e_t action);
316 player_orientation_e_t orientation;
317 float heal_clock;
318
319 entity_t **items;
320 int cur_item;
321} player_t;
322
323typedef struct rect_s {
324 sfVector2f *origin;
325 sfVector2f *scale;
326 sfColor *fill_color;
327 sfColor *outline_color;
328 float outline_thickness;
329 sfVector2f *size;
330 float rotation;
331} rect_t;
332
333typedef struct {
334 sfVideoMode video_mode;
335 sfRenderWindow *window;
336 sfView *view;
337 sfSprite *sprite;
338 sfTexture *texture;
339 sfVector2i mouse_pos;
340 sfVector2i old_mouse_pos;
341 sfClock *clock;
342 sfEvent event;
343 sfMusic *music;
344 sfMusic *fx;
345 sfText *text;
346
347 int vol_music;
348 int vol_fx;
349 int size;
350 float delay;
351 int framerate;
352 sfVector2i position;
354
355typedef struct variables {
356 int standby;
357 int show_hitbox;
358 int show_equipments;
360
361typedef struct button {
362 int id;
363 char *text;
364 int state;
365 sfVector2f pos;
366 sfVector2f scale;
367 void (*function)(void);
368} button_t;
369
370typedef struct thread_info {
371 char active;
372 thrd_t thread;
374
375typedef struct {
376 window_info_t *window_i;
377 user_variables_t *user_variables;
378 sfTexture *main_texture;
379
380 int old_state;
381 int cur_state;
382
383 map_t *map_infos;
384 nodes_t *entities_list;
385 entity_t *player;
386 sfText *text_chatbox;
388
389
391game_info_t *get_game(void);
392entity_t *get_player_entity(void);
393window_info_t *get_window(void);
394thread_info_t *get_thread(void);
395user_variables_t *get_user(void);
396player_t *get_player(void);
397entity_t *get_entity(char *id);
398sfIntRect get_stat_rect(char *stat);
399keys_t *get_keys(void);
400bind_t *get_bind(void);
401sfFont *get_font(void);
402button_t **get_buttons_menu(void);
403button_t **get_buttons_settings(void);
404button_t **get_buttons_pause(void);
405button_t **get_buttons_bind(void);
406entity_t *get_new_item(sfVector2f pos, int id);
407void init_bg2(void);
408
409 #define RANDOM_ITEM(pos) get_new_item(pos, rand() % 12)
410
411int normalize_vector(sfVector2f *vector);
413
415void text_center(sfText **text, sfVector2f pos, sfIntRect rect);
416void move_rect(entity_t *entity,
417 int *offX_maX_miX_offY_maX_miY, ...);
418void letter_by_letter(float *clock, char **str, int *j);
421
422//ENTITY OBJECT
423int interact(entity_t *);
424int stat_object(entity_t *);
425
426//NPC
427int quest(entity_t *self);
428int troll(entity_t *self);
429int speak(entity_t *self);
430int thief_npc(entity_t *self);
431int mob_npc_one(entity_t *self);
432int mob_npc_two(entity_t *self);
433int you_are_dead(entity_t *self);
434int drop_itemnpc(entity_t *self);
435int end_npc(entity_t *self);
436int remove_me(entity_t *self);
437int display_chatnpc(char **dialog, sfVector2f pos, int reset);
438
440
442void splash_function(void (*func)(void));
443void loading_function(void (*func)(void));
445
447void display_menu(void);
448void display_main(void);
449void display_pause(void);
450void display_settings(void);
451void display_bind(void);
452void display_exit(void);
453void display_npc(entity_t *entity);
454void display_equipments(void);
455void display_globalstat(void);
456
457void draw_map(void);
458void create_new_map(void);
459char **generate_whole_map(int width, int height);
460
461void display_entity(entity_t *entity);
462void display_stat(entity_t *entity);
463void display_hud(void);
465
467void update_menu(void);
468void update_main(void);
469void update_pause(void);
470void update_settings(void);
471void update_bind(void);
472void update_hud(void);
473void update_player2(void);
475
477int *get_offset_rect(char *id);
478void display_intro(void);
479void update_intro(void);
480void init_sage(void);
481void init_bg(void);
482int display_talk(char reset);
483void display_bonus(void);
485
487sfVector2f player_pos(void);
488sfVector2f player_dim(void);
489sfVector2f player_dimo(void);
490 #define PLAYER_POS player_pos()
491 #define PLAYER_DIM player_dim()
492 #define PLAYER_DIMO player_dimo()
493
494void choose_offset(char *action, int *offset_rect, sfIntRect rect);
495void display_player(void);
496void display_levelbar(player_t *player);
497void display_level_up(char *id, action_player_e_t action,
498 float value, int other);
499void display_hit_on_mob(void);
500void display_player_stat(entity_t *player_e);
501void update_player(void);
502void stat_up(char *id, action_player_e_t stat, int other);
503entity_t *init_player(sfSprite **sprite);
504
506int action_player(action_player_e_t action);
507void atk_up(sfText *text, float value);
508void def_up(sfText *text, float value);
509void hp_up(sfText *text, float value);
510void attack_mob(void);
511
513void update_item(void);
514void display_item(entity_t *);
515void events_item(sfEvent event);
516entity_t *current_weapon(void);
517
519entity_t *random_npc(sfVector2f pos);
520
521
523
525void event_button(button_t **buttons);
526void display_button(button_t **buttons);
527
528void menu_play(void);
529void menu_resume(void);
530void menu_settings(void);
531void menu_quit(void);
532
533void settings_quit(void);
534
535void pause_resume(void);
536void pause_bind(void);
537void pause_settings(void);
538void pause_menu(void);
539
540void bind_quit(void);
541void bind_left(void);
542void bind_right(void);
543void bind_up(void);
544void bind_down(void);
545void bind_attack(void);
546void bind_pause(void);
547void bind_interact(void);
548void bind_slot1(void);
549void bind_slot2(void);
550void bind_slot3(void);
551void bind_inv(void);
553
555void analyse_events(void);
556
557void events_intro(sfEvent event);
558void events_main(sfEvent event);
559void events_player(sfEvent event);
560void events_menu(sfEvent event);
561void events_pause(sfEvent event);
562void events_settings(sfEvent event);
563void events_bind(sfEvent event);
564void events_exit(sfEvent event);
566
568void init_gladiator(sfVector2f pos);
569void init_chest_mimic(sfVector2f pos);
570void init_jar_mimic(sfVector2f pos);
571void init_barrel_mimic(sfVector2f pos);
572void init_demon(sfVector2f pos);
573void init_ghoul(sfVector2f pos);
574
575void init_game(void);
576void init_game_help(void);
577
578
580void update_entity(entity_t *entity);
581void update_mob_animation(entity_t *entity);
582int is_hitbox_intersecting(sfRectangleShape *hitbox1,
583 sfRectangleShape *hitbox2);
584void check_mob_action(void);
585float calculate_damage(float attack, float defense);
586void check_mob_alive(void);
587void knockback(entity_t *entity, entity_t *knockbacked_entity,
588 float resitance);
589int is_invalid_case(sfVector2f map_case);
590void knockback_mob(entity_t *mob);
591
593float distance_heuristic(sfVector2f a, sfVector2f b);
594int vector_cmp(sfVector2f a, sfVector2f b);
595sfVector2f vector_add(sfVector2f a, sfVector2f b);
596path_t *get_best_path(sfVector2f start, sfVector2f end);
597void display_path(path_t *path);
598nodes_t *get_visited_list(nodes_t *visited);
599sfVector2f pos_to_case(sfVector2f vector);
600sfVector2f move_to_next_point(sfVector2f start, sfVector2f end,
601 int speed, entity_t *entity);
602void check_collision(entity_t *entity1, entity_t *entity2);
603int a_ov(int side, float speed, entity_t *player);
604sfVector2f get_valid_random_pos(void);
605
606
608void play_music(char *path);
609void play_sound(entity_t *entity, char *path);
610void update_volume(void);
611
613int save_found(void);
614char *get_file(char *file);
615void save_entities(void);
616void save_map(void);
617void save_player(void);
618void save_game(void);
619void load_entities(void);
620void load_map(void);
621void load_player(void);
622void load_save(void);
623
631button_t *create_button(char *text, sfFloatRect rect, void (*function)(void));
632
633
646sfText *create_text(int nb, ...);
647
648
660sfSprite *create_sprite(int nb, ...);
661
662
677sfRectangleShape *create_rectangle(int nb, ...);
678
679
692entity_t *create_entity(int nb, ...);
693void update_entity(entity_t *entity);
694
696
697//MAP
698char **generate_whole_map(int width, int height);
699void place_mobs_map(void);
700void remove_mobs_fl(void);
701void restart_game(void);
702void move_end_ladder(void);
703void place_npc_map(void);
704
706void analyse_events(void);
707
708#endif //CSFML_H
Definition csfml.h:211
Definition csfml.h:167
Definition csfml.h:361
Definition csfml.h:239
Definition csfml.h:375
Definition csfml.h:258
Definition csfml.h:187
Definition csfml.h:280
Definition csfml.h:222
Definition mylist.h:23
Definition csfml.h:275
Definition csfml.h:271
Definition csfml.h:200
Definition csfml.h:191
Definition csfml.h:291
Definition csfml.h:323
Definition csfml.h:370
Definition csfml.h:355
Definition csfml.h:333