-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbirds.c
More file actions
84 lines (76 loc) · 2.36 KB
/
birds.c
File metadata and controls
84 lines (76 loc) · 2.36 KB
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
/*
** EPITECH PROJECT, 2024
** B-MUL-100-LYN-1-1-myhunter-aurelien.demeusy
** File description:
** birds.c
*/
#include <SFML/Graphics.h>
#include <SFML/Window.h>
#include <stdlib.h>
#include "game/structs.h"
#include "include/my.h"
struct duck *init_duck(void)
{
struct duck *duck = malloc(sizeof(struct duck));
duck->texture = sfTexture_createFromFile("birds/birds.png", NULL);
if (!duck->texture) {
free(duck);
return NULL;
}
duck->sprite = sfSprite_create();
sfSprite_setTexture(duck->sprite, duck->texture, sfTrue);
duck->rect = (sfIntRect){0, 0, 110, 110};
sfSprite_setTextureRect(duck->sprite, duck->rect);
duck->position = (sfVector2f){-110, rand() % 900};
duck->velocity = (sfVector2f){rand() % 301 + 300, 400.0f};
duck->frame_time = 0.2f;
duck->elapsed_time = 0.0f;
duck->frame_index = 0;
duck->frame_count = 3;
duck->touched = 0;
duck->animation_clock = sfClock_create();
return duck;
}
void update_duck(struct duck *duck, float delta_time)
{
if (duck->touched) {
duck->position.y += duck->fall_speed * delta_time;
duck->fall_speed += 500.0f * delta_time;
sfSprite_rotate(duck->sprite, 0.01);
} else {
duck->position.x += duck->velocity.x * delta_time;
duck->elapsed_time += delta_time;
if (duck->elapsed_time >= duck->frame_time) {
duck->frame_index = (duck->frame_index + 1) % duck->frame_count;
duck->rect.left = duck->frame_index * duck->rect.width;
sfSprite_setTextureRect(duck->sprite, duck->rect);
duck->elapsed_time = 0.0f;
}
}
sfSprite_setPosition(duck->sprite, duck->position);
duck->hitbox = sfSprite_getGlobalBounds(duck->sprite);
}
void draw_ducks(struct dk_n *list, sfRenderWindow *window)
{
while (list) {
sfRenderWindow_drawSprite(window, list->duck.sprite, NULL);
list = list->next;
}
}
void spawn_duck(struct dk_n **duck_list, float *spawn_timer)
{
struct dk_n *new_node;
if (*spawn_timer >= 1.0f) {
new_node = malloc(sizeof(struct dk_n));
if (new_node) {
new_node->duck = *init_duck();
new_node->next = *duck_list;
*duck_list = new_node;
}
*spawn_timer = 0.0f;
}
}
void render_ducks(struct dk_n *duck_list, sfRenderWindow *window)
{
draw_ducks(duck_list, window);
}