breakhack/src/item.c

60 lines
955 B
C
Raw Normal View History

2018-01-24 21:20:24 +01:00
#include <stdlib.h>
#include "item.h"
#include "util.h"
Item *
item_create(void)
{
Item *item = ec_malloc(sizeof(Item));
item->sprite = NULL;
item->collected = false;
2018-01-25 10:45:05 +01:00
m_strcpy(item->label, 50, "");
item->value = 0.0;
2018-01-30 13:44:21 +01:00
item->items = NULL;
item->effect = NULL;
return item;
}
2018-01-30 13:44:21 +01:00
void
item_render(Item *item, Camera *cam)
{
sprite_render(item->sprite, cam);
}
2018-01-30 13:44:21 +01:00
void
item_collected(Item *item, Player *player)
{
LinkedList *items = item->items;
while (items != NULL) {
Item *subitem = items->data;
items = items->next;
item_collected(subitem, player);
}
if (item->effect != NULL)
item->effect(item, player);
item->collected = true;
}
void
item_destroy(Item *item)
{
2018-01-30 13:44:21 +01:00
LinkedList *items;
if (item->sprite)
sprite_destroy(item->sprite);
2018-01-30 13:44:21 +01:00
items = item->items;
while (items != NULL) {
2018-01-30 14:00:52 +01:00
Item *subitem = items->data;
2018-01-30 13:44:21 +01:00
items->data = NULL;
items = items->next;
item_destroy(subitem);
}
linkedlist_destroy(&items);
free(item);
2018-01-25 10:45:05 +01:00
}