76 lines
1.8 KiB
C
76 lines
1.8 KiB
C
#include <time.h>
|
|
#include <event.h>
|
|
#include <display.h>
|
|
#include "game.h"
|
|
#include "components.h"
|
|
|
|
void game_init(void)
|
|
{
|
|
display_init();
|
|
|
|
texture_manager_init(&game.texture_manager);
|
|
|
|
entity_manager_init(&game.entity_manager);
|
|
|
|
entity_t *player = create_entity(0);
|
|
|
|
entity_manager_add_entity(&game.entity_manager, player);
|
|
|
|
frect_t player_bounds = {10.0f, 10.0f, 32.0f, 32.0f};
|
|
|
|
add_component(player, create_component(TRANSFORM_COMPONENT), player_bounds, PLAYER_DEFAULT_SPEED);
|
|
add_component(player, create_component(SPRITE_COMPONENT), "player_idle_sheet");
|
|
add_component(player, create_component(ANIMATION_SYSTEM), 4, 0, PLAYER_DEFAULT_IDLE_ANIMATION_SPEED, true, true, false);
|
|
add_component(player, create_component(PLAYER_SYSTEM));
|
|
|
|
game.is_running = true;
|
|
}
|
|
|
|
void game_handle_event(void)
|
|
{
|
|
event_t event;
|
|
|
|
while(pollevent(&event))
|
|
{
|
|
if(event.type == EVENT_KEY_DOWN)
|
|
game.events.keys[event.key.keysym.scancode] = true;
|
|
else if(event.type == EVENT_KEY_UP)
|
|
game.events.keys[event.key.keysym.scancode] = false;
|
|
|
|
if(event.type == EVENT_QUIT)
|
|
game.is_running = false;
|
|
}
|
|
}
|
|
|
|
static inline void update_time(void)
|
|
{
|
|
clock_t last_clock_state = clock();
|
|
clock_t start_clock = clock();
|
|
game.delta_time_ms = (float)(start_clock - last_clock_state) * 1000.0f / CLOCKS_PER_SEC;
|
|
last_clock_state = start_clock;
|
|
}
|
|
|
|
void game_update(void)
|
|
{
|
|
update_time();
|
|
|
|
entity_manager_update(&game.entity_manager);
|
|
}
|
|
|
|
void game_render(void)
|
|
{
|
|
display_clear();
|
|
|
|
entity_manager_draw(&game.entity_manager);
|
|
|
|
display_update();
|
|
}
|
|
|
|
void game_exit(void)
|
|
{
|
|
entity_manager_clear(&game.entity_manager);
|
|
texture_manager_clear(&game.texture_manager);
|
|
|
|
display_exit();
|
|
}
|