49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
#include "component_button.h"
|
|
|
|
void
|
|
component_button_add(ComponentButton* self, ECS* ecs)
|
|
{
|
|
for (s32 i = 0; i < COMPONENT_BUTTON_DEPENDENCY_COUNT; i++)
|
|
ecs_component_add(ecs, COMPONENT_BUTTON_DEPENDENCIES[i], self->component.id);
|
|
}
|
|
|
|
void
|
|
component_button_tick(ComponentButton* self, ECS* ecs)
|
|
{
|
|
ComponentTextureQuad* textureQuad;
|
|
vec2 mousePosition;
|
|
Rectangle rectangle;
|
|
|
|
textureQuad = ecs_component_get(ecs, COMPONENT_TEXTURE_QUAD, self->component.id);
|
|
|
|
mouse_buffer_position_get(&ecs->input->mouse, textureQuad->buffer, ecs->renderer, mousePosition);
|
|
|
|
component_texture_quad_rectangle_get(textureQuad, &rectangle);
|
|
|
|
if (rectangle_has_point(&rectangle, mousePosition))
|
|
{
|
|
self->state = BUTTON_STATE_HOVER;
|
|
|
|
glm_vec4_copy((f32*)COMPONENT_BUTTON_STATE_HOVER_COLOR, textureQuad->color);
|
|
|
|
if (control_held(ecs->control, CONTROL_ACTION_PRIMARY))
|
|
{
|
|
if (self->state != BUTTON_STATE_PRESSED)
|
|
{
|
|
self->isJustPressed = true;
|
|
sound_play(&ecs->resources->sounds[SOUND_SELECT]);
|
|
}
|
|
else
|
|
self->isJustPressed = false;
|
|
|
|
glm_vec4_copy((f32*)COMPONENT_BUTTON_STATE_PRESSED_COLOR, textureQuad->color);
|
|
self->state = BUTTON_STATE_PRESSED;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
glm_vec4_copy((f32*)COMPONENT_BUTTON_STATE_NONE_COLOR, textureQuad->color);
|
|
self->state = BUTTON_STATE_NONE;
|
|
}
|
|
}
|