104 lines
1.6 KiB
C
104 lines
1.6 KiB
C
/*
|
|
* DESCRIPTION:
|
|
* Scale component.
|
|
*/
|
|
|
|
#include "c_scale.h"
|
|
|
|
static void add(struct CScale* self);
|
|
static void update_f(struct CScale* self);
|
|
|
|
static void
|
|
add(struct CScale* self)
|
|
{
|
|
self->isFinished = true;
|
|
}
|
|
|
|
/* Updates an scale component. */
|
|
static void
|
|
update_f(struct CScale* self)
|
|
{
|
|
struct CSprite* sprite;
|
|
struct CText* text;
|
|
f32 progress;
|
|
f32* scale;
|
|
|
|
sprite = ecs_get(self->id, ECS_C_SPRITE);
|
|
text = ecs_get(self->id, ECS_C_TEXT);
|
|
|
|
if (self->isFinished)
|
|
return;
|
|
|
|
if (sprite)
|
|
scale = &sprite->scale;
|
|
else if (text)
|
|
scale = &text->scale;
|
|
else
|
|
return;
|
|
|
|
progress = (f32)self->timer / self->timerMax;
|
|
|
|
switch (self->type)
|
|
{
|
|
case C_SCALE_TO:
|
|
case C_SCALE_TO_STICK:
|
|
*scale = self->baseValue + (self->value * (1.0f - progress));
|
|
break;
|
|
case C_SCALE_FROM:
|
|
case C_SCALE_FROM_STICK:
|
|
*scale = self->baseValue + (self->value * progress);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
self->timer--;
|
|
|
|
if (self->timer <= 0)
|
|
{
|
|
switch (self->type)
|
|
{
|
|
case C_SCALE_TO:
|
|
case C_SCALE_FROM:
|
|
*scale = self->baseValue;
|
|
break;
|
|
case C_SCALE_TO_STICK:
|
|
case C_SCALE_FROM_STICK:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
self->isFinished = true;
|
|
}
|
|
}
|
|
|
|
/* Sets scale component. */
|
|
void
|
|
c_scale_set(struct CScale* self, f32 baseValue, f32 value, s32 timerMax, enum CScaleType type)
|
|
{
|
|
self->value = value;
|
|
self->baseValue = baseValue;
|
|
self->timerMax = timerMax;
|
|
self->type = type;
|
|
|
|
self->timer = self->timerMax;
|
|
self->isFinished = false;
|
|
}
|
|
|
|
/* Registers scale component. */
|
|
void
|
|
c_scale_register(void)
|
|
{
|
|
ecs_register
|
|
(
|
|
ECS_C_SCALE,
|
|
sizeof(struct CScale),
|
|
C_SCALE_LIMIT,
|
|
(ECSFunction)add,
|
|
NULL,
|
|
(ECSFunction)update_f,
|
|
NULL,
|
|
NULL
|
|
);
|
|
}
|