70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
#include <gint/keyboard.h>
|
|
#include <gint/display.h>
|
|
#include "game.h"
|
|
#include "ecs/components.h"
|
|
|
|
void game_init(void)
|
|
{
|
|
texture_manager_init(&game.texture_manager);
|
|
texture_manager_load_builtin_textures(&game.texture_manager);
|
|
|
|
entity_manager_init(&game.entity_manager);
|
|
|
|
entity_t *player = entity_manager_add_entity(&game.entity_manager, "player");
|
|
|
|
rect_t player_bounds = {10.0f, 10.0f, 32.0f, 32.0f};
|
|
float player_speed = 50.0f;
|
|
|
|
add_component(player, create_component(TRANSFORM_COMPONENT), player_bounds, player_speed);
|
|
add_component(player, create_component(SPRITE_COMPONENT), "player_idle_sheet");
|
|
add_component(player, create_component(ANIMATION_SYSTEM), 4, 0, 200.0f, true, true, false);
|
|
add_component(player, create_component(PLAYER_SYSTEM));
|
|
|
|
game.last_clock_state = clock();
|
|
|
|
game.is_running = true;
|
|
}
|
|
|
|
void game_handle_event(void)
|
|
{
|
|
key_event_t key_event;
|
|
|
|
do
|
|
{
|
|
key_event = pollevent();
|
|
|
|
if (key_event.type == KEYEV_DOWN)
|
|
game.event.keys[key_event.key] = true;
|
|
else if (key_event.type == KEYEV_UP)
|
|
game.event.keys[key_event.key] = false;
|
|
|
|
if (key_event.type == KEYEV_DOWN && key_event.key == KEY_EXIT)
|
|
game.is_running = false;
|
|
}
|
|
while (key_event.type != KEYEV_NONE);
|
|
}
|
|
|
|
void game_update(void)
|
|
{
|
|
clock_t start_clock = clock();
|
|
game.delta_time_ms = (double)(start_clock - game.last_clock_state) * 1000.0f / CLOCKS_PER_SEC;
|
|
game.last_clock_state = start_clock;
|
|
|
|
entity_manager_update(&game.entity_manager);
|
|
}
|
|
|
|
void game_render(void)
|
|
{
|
|
dclear(C_WHITE);
|
|
|
|
entity_manager_draw(&game.entity_manager);
|
|
|
|
dupdate();
|
|
}
|
|
|
|
void game_exit(void)
|
|
{
|
|
entity_manager_clear(&game.entity_manager);
|
|
texture_manager_clear(&game.texture_manager);
|
|
}
|