frillrun/src/game/state/level/text_queue.c
2024-08-29 18:06:02 -04:00

103 lines
1.8 KiB
C

#include "text_queue.h"
void level_text_queue_set(Level* self);
void level_text_queue_add(Level* self, const char* string);
void level_text_queue_clear(Level* self);
void
level_text_queue_set(Level* self)
{
self->ecs->isLog = false;
for (s32 i = 0; i < (s32)self->textQueue.count; i++)
{
EntityID* id;
ComponentDeleteOnTimer* deleteOnTimer;
id = vector_get(&self->textQueue, i);
deleteOnTimer = ecs_component_get(self->ecs, COMPONENT_DELETE_ON_TIMER, *id);
if (!deleteOnTimer)
{
vector_remove(&self->textQueue, i);
i--;
}
}
self->ecs->isLog = true;
for (s32 i = 0; i < (s32)self->textQueue.count; i++)
{
EntityID* id;
ComponentText* text;
id = vector_get(&self->textQueue, i);
text = ecs_component_get(self->ecs, COMPONENT_TEXT, *id);
glm_vec3_copy(LEVEL_TEXT_QUEUE_POSITION, text->position);
text->position[1] -= self->ecs->resources->fonts[FONT_SMALL].size * i;
}
}
void
level_text_queue_clear(Level* self)
{
self->ecs->isLog = false;
for (s32 i = 0; i < (s32)self->textQueue.count; i++)
{
EntityID* id;
id = vector_get(&self->textQueue, i);
if (id)
ecs_entity_delete(self->ecs, *id);
}
vector_clear(&self->textQueue);
self->ecs->isLog = true;
}
void
level_text_queue_add(Level* self, const char* string)
{
EntityID id;
id = entity_text_queue_entry_add
(
self->ecs,
&self->ecs->resources->fonts[FONT_SMALL],
RENDERER_BUFFER_UI,
string,
LEVEL_TEXT_QUEUE_POSITION,
-1,
LEVEL_TEXT_QUEUE_TIMER
);
vector_push(&self->textQueue, &id);
level_text_queue_set(self);
}
void
level_text_queue_init(Level* self)
{
vector_init(&self->textQueue, sizeof(EntityID));
}
void
level_text_queue_tick(Level* self)
{
level_text_queue_set(self);
}
void
level_text_queue_free(Level* self)
{
vector_free(&self->textQueue);
}