82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
/*
|
|
* DESCRIPTION:
|
|
* Flash component.
|
|
*/
|
|
|
|
#include "c_flash.h"
|
|
|
|
static void update_f(struct CFlash* self);
|
|
|
|
/* Updates flash component. */
|
|
static void
|
|
update_f(struct CFlash* self)
|
|
{
|
|
vec4 color;
|
|
f32 progress;
|
|
|
|
if (self->isFinished)
|
|
return;
|
|
|
|
progress = (f32)self->timer / self->timerMax;
|
|
|
|
glm_vec4_copy(self->color, color);
|
|
|
|
switch (self->type)
|
|
{
|
|
case C_FLASH_VANISH:
|
|
glm_vec4_scale(color, progress, color);
|
|
break;
|
|
case C_FLASH_APPEAR:
|
|
glm_vec4_scale(color, (1.0f - progress), color);
|
|
break;
|
|
case C_FLASH_STROBE:
|
|
glm_vec4_scale(color, sin((M_PI * 2) * (progress * 2.0f)), color);
|
|
break;
|
|
case C_FLASH_CONSTANT:
|
|
glm_vec4_copy(self->color, color);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
renderer_clear_color_set(&game.renderer, color);
|
|
|
|
if (self->timer <= 0)
|
|
{
|
|
renderer_clear_color_set(&game.renderer, self->baseColor);
|
|
self->timer = 0;
|
|
self->isFinished = true;
|
|
}
|
|
else
|
|
self->timer--;
|
|
}
|
|
|
|
/* Sets flash component info. */
|
|
void
|
|
c_flash_set(struct CFlash* self, vec4 baseColor, vec4 color, s32 timerMax, enum CFlashType type)
|
|
{
|
|
self->timerMax = timerMax;
|
|
self->type = type;
|
|
glm_vec4_copy(baseColor, self->baseColor);
|
|
glm_vec4_copy(color, self->color);
|
|
self->timer = self->timerMax;
|
|
self->isFinished = false;
|
|
}
|
|
|
|
/* Registers flash component. */
|
|
void
|
|
c_flash_register(void)
|
|
{
|
|
ecs_register
|
|
(
|
|
ECS_C_FLASH,
|
|
sizeof(struct CFlash),
|
|
C_FLASH_LIMIT,
|
|
NULL,
|
|
NULL,
|
|
(ECSFunction)update_f,
|
|
NULL,
|
|
NULL
|
|
);
|
|
}
|