summaryrefslogtreecommitdiffstats
path: root/draw.h
diff options
context:
space:
mode:
Diffstat (limited to 'draw.h')
-rw-r--r--draw.h57
1 files changed, 34 insertions, 23 deletions
diff --git a/draw.h b/draw.h
index ab81617..eb14e42 100644
--- a/draw.h
+++ b/draw.h
@@ -3,45 +3,45 @@
void add_sparkle(void)
{
- sparkle_instance* new;
+ sparkle_instance *new = ec_malloc(sizeof(sparkle_instance));
- new = ec_malloc(sizeof(sparkle_instance));
new->loc.x = SCREEN_WIDTH + 80;
new->loc.y = (rand() % (SCREEN_HEIGHT + sparkle_height)) - sparkle_height;
new->frame = 0;
new->frame_mov = 1;
new->speed = 10 + (rand() % 30);
new->layer = rand() % 2;
- list_add(&new->list, &sparkle_list);
+
+ LIST_INSERT_HEAD(&sparkle_list, new, entries);
}
void add_cat(unsigned int x, unsigned int y)
{
- cat_instance* new;
+ cat_instance *new = ec_malloc(sizeof(cat_instance));
- new = ec_malloc(sizeof(cat_instance));
new->loc.x = x;
new->loc.y = y;
- list_add(&new->list, &cat_list);
+
+ LIST_INSERT_HEAD(&cat_list, new, entries);
}
void add_rainbow(unsigned int x, unsigned int y)
{
- rainbow_instance* new;
+ rainbow_instance *new = ec_malloc(sizeof(rainbow_instance));
- new = ec_malloc(sizeof(rainbow_instance));
new->loc.x = x;
new->loc.y = y;
new->sprite = rainbow_sprite;
- list_add(&new->list, &rainbow_list);
+
+ LIST_INSERT_HEAD(&rainbow_list, new, entries);
}
void update_rainbows()
{
cat_instance *c;
- /* Rainbows need to be placed according to the cat position (which changes constantly) */
- list_for_each_entry(c, &cat_list, list)
+ /* rainbows need to be placed according to the cat position (which changes constantly) */
+ LIST_FOREACH(c, &cat_list, entries)
{
add_rainbow((SCREEN_WIDTH - rainbow_width) / 2 - OFFSET /* Default position in the center */
- ((SCREEN_WIDTH - cat_width) / 2 - c->loc.x), /* Plus the amount the cat is off the center */
@@ -50,17 +50,17 @@ void update_rainbows()
}
- rainbow_instance *r, *tmpr;
+ rainbow_instance *r, *rtmp;
- /* Update the position of each rainbow that exists */
- list_for_each_entry_safe(r, tmpr, &rainbow_list, list)
+ /* update the position of each rainbow left */
+ LIST_FOREACH_SAFE(r, &rainbow_list, entries, rtmp)
{
r->loc.x -= rainbow_width;
- /* If rainbow if off the screen, delete and free() it */
+ /* if rainbow is off screen, delete and free() it */
if ((r->loc.x + rainbow_width) < 0)
{
- list_del(&r->list);
+ LIST_REMOVE(r, entries);
free(r);
}
}
@@ -69,6 +69,7 @@ void update_rainbows()
void update_sparkles()
{
+ /* ensure screen has enough sparkles at all times */
sparkle_spawn_counter += rand() % SCREEN_HEIGHT;
while (sparkle_spawn_counter >= 1000)
{
@@ -76,17 +77,20 @@ void update_sparkles()
sparkle_spawn_counter -= 1000;
}
- sparkle_instance *s, *tmps;
- list_for_each_entry_safe(s, tmps, &sparkle_list, list)
+ sparkle_instance *s, *stmp;
+ LIST_FOREACH_SAFE(s, &sparkle_list, entries, stmp)
{
+ /* move sparkle left */
s->loc.x -= s->speed;
s->frame += s->frame_mov;
+ /* reset sparkle frame */
if (s->frame + 1 >= sparkle_count || s->frame < 1){s->frame_mov = 0 - s->frame_mov;}
+ /* if sparkle offscreen, delete it */
if ((s->loc.x + sparkle_width) < 0)
{
- list_del(&s->list);
+ LIST_REMOVE(s, entries);
free(s);
}
}
@@ -96,8 +100,9 @@ void handle_sine()
{
cat_instance *c;
- list_for_each_entry(c, &cat_list, list)
+ LIST_FOREACH(c, &cat_list, entries)
{
+ /* sine magic */
double pos = (SCREEN_HEIGHT - cat_height)/2 * sin((2*PI*444444)*t);
c->loc.y = ((SCREEN_HEIGHT - cat_height)/2 - pos);
}
@@ -109,9 +114,11 @@ void draw_cats()
{
cat_instance* c;
- list_for_each_entry(c, &cat_list, list)
+ LIST_FOREACH(c, &cat_list, entries)
{
+ /* source sprite dimensions */
SDL_Rect srcrect = {cat_sprite * cat_width, 0, cat_width, cat_height};
+ /* dimensions of destination rectangle */
SDL_Rect dstrect = {c->loc.x, c->loc.y, cat_width*cat_size, cat_height*cat_size};
SDL_RenderCopy(renderer, cat_texture, &srcrect, &dstrect);
@@ -122,9 +129,11 @@ void draw_rainbows()
{
rainbow_instance* r;
- list_for_each_entry(r, &rainbow_list, list)
+ LIST_FOREACH(r, &rainbow_list, entries)
{
+ /* source sprite dimensions */
SDL_Rect srcrect = {r->sprite * rainbow_width, 0, rainbow_width, rainbow_height};
+ /* dimensions of destination rectangle */
SDL_Rect dstrect = {r->loc.x, r->loc.y, rainbow_width*cat_size, rainbow_height*cat_size};
SDL_RenderCopy(renderer, rainbow_texture, &srcrect, &dstrect);
@@ -135,9 +144,11 @@ void draw_sparkles()
{
sparkle_instance* s;
- list_for_each_entry(s, &sparkle_list, list)
+ LIST_FOREACH(s, &sparkle_list, entries)
{
+ /* source sprite dimensions */
SDL_Rect srcrect = {sparkle_sprite * sparkle_width, 0, sparkle_width, sparkle_height};
+ /* dimensions of destination rectangle */
SDL_Rect dstrect = {s->loc.x, s->loc.y, sparkle_width*cat_size, sparkle_height*cat_size};
SDL_RenderCopy(renderer, sparkle_texture, &srcrect, &dstrect);