diff --git a/SDL3_Core b/SDL3_Core index 4995e07..a9d88e5 160000 --- a/SDL3_Core +++ b/SDL3_Core @@ -1 +1 @@ -Subproject commit 4995e0757b6b8fc494b37b9d0ad669eff7f776df +Subproject commit a9d88e50e71ed30570c72f3587be8f8899ca697f diff --git a/src/game.c b/src/game.c index 1b691dd..5146112 100644 --- a/src/game.c +++ b/src/game.c @@ -6,6 +6,7 @@ #include "event_bus.h" #include "ecs.h" #include "components.h" +#include "map.h" #include "inputs.h" #include "errors.h" @@ -94,262 +95,11 @@ int game_init(void) if(!entity_new_component(player_entity, PLAYER_SYSTEM)) return_failure_int; } - /* ======== Lever ========*/ - { - entity_t *lever_entity = entity_manager_new_entity(1); - if(!lever_entity) return_failure_int; - { - component_t *transform_component = entity_new_component(lever_entity, TRANSFORM_COMPONENT); - if(!transform_component) return_failure_int; + asset_t *map_asset = asset_manager_get_asset("dungeon_room_1"); + if(!map_asset) return_failure_int; - transform_component_data_t *transform_component_data = transform_component->data; - - transform_component_data->bounds = (frect_t) { - .x = 30.0f, - .y = 120.0f, - .w = 48.0f, - .h = 32.0f - }; - } - - { - component_t *sprite_component = entity_new_component(lever_entity, SPRITE_COMPONENT); - if(!sprite_component) return_failure_int; - - sprite_component_data_t *sprite_component_data = sprite_component->data; - - asset_t *asset = asset_manager_load_asset("lever_sheet", ASSET_TEXTURE); - if(!asset) return_failure_int; - - sprite_component_data->texture = asset->data; - } - - { - component_t *animation_system = entity_new_component(lever_entity, ANIMATION_SYSTEM); - if(!animation_system) return_failure_int; - - animation_system_data_t *animation_system_data = animation_system->data; - - animation_system_data->nb_frames = 3; - animation_system_data->current_frame_nb = 0; - animation_system_data->frame_delay_ms = LEVER_DEFAULT_ANIMATION_SPEED; - - animation_system_data->play = false; - animation_system_data->loop = false; - animation_system_data->reverse = false; - - if(animation_system_apply_changes(animation_system)) return_failure_int; - } - - { - component_t *hitbox_component = entity_new_component(lever_entity, HITBOX_COMPONENT); - if(!hitbox_component) return_failure_int; - - hitbox_component_data_t *hitbox_component_data = hitbox_component->data; - - hitbox_component_data->position = (fvector2d_t) { - .x = 0.3333333333333333f, - .y = 0.59375 - }; - - hitbox_component_data->scale = (fvector2d_t) { - .x = 0.3333333333333333f, - .y = 0.34375f - }; - } - - { - component_t *interact_component = entity_new_component(lever_entity, INTERACT_COMPONENT); - if(!interact_component) return_failure_int; - - interact_component_data_t *interact_component_data = interact_component->data; - - interact_component_data->position = (fvector2d_t) { - .x = 0.16666666666666666f, - .y = 0.34375f - }; - - interact_component_data->scale = (fvector2d_t) { - .x = 0.6666666666666666f, - .y = 0.84375f - }; - - interact_component_data->type = INTERACT_TOGGLE; - interact_component_data->state = 0; - - interact_component_modify_topic_id(interact_component, 0); - - } - - { - component_t *lever_component = entity_new_component(lever_entity, LEVER_COMPONENT); - if(!lever_component) return_failure_int; - - lever_component_data_t * lever_component_data = lever_component->data; - - lever_component_data->topic_id = 0; - lever_component_data->state = false; - - lever_component_subscribe(lever_component); - } - } - - /* ======== Door ======== */ - { - entity_t *door_entity = entity_manager_new_entity(1); - if(!door_entity) return_failure_int; - - { - component_t *transform_component = entity_new_component(door_entity, TRANSFORM_COMPONENT); - if(!transform_component) return_failure_int; - - transform_component_data_t *transform_component_data = transform_component->data; - - transform_component_data->bounds = (frect_t) { - .x = 120.0f, - .y = 30.0f, - .w = 32.0f, - .h = 48.0f - }; - } - - { - component_t *sprite_component = entity_new_component(door_entity, SPRITE_COMPONENT); - if(!sprite_component) return_failure_int; - - sprite_component_data_t * sprite_component_data = sprite_component->data; - - asset_t *asset = asset_manager_load_asset("barred_door_sheet", ASSET_TEXTURE); - if(!asset) return_failure_int; - - sprite_component_data->texture = asset->data; - } - - { - component_t *animation_system = entity_new_component(door_entity, ANIMATION_SYSTEM); - if(!animation_system) return_failure_int; - - animation_system_data_t *animation_system_data = animation_system->data; - - animation_system_data->nb_frames = 8; - animation_system_data->current_frame_nb = 0; - animation_system_data->frame_delay_ms = BARRED_DOOR_DEFAULT_ANIMATION_SPEED; - - animation_system_data->play = false; - animation_system_data->loop = false; - animation_system_data->reverse = false; - - if(animation_system_apply_changes(animation_system)) return_failure_int; - } - - { - component_t *hitbox_component = entity_new_component(door_entity, HITBOX_COMPONENT); - if(!hitbox_component) return_failure_int; - - hitbox_component_data_t * hitbox_component_data = hitbox_component->data; - - hitbox_component_data->position = (fvector2d_t) { - .x = 0.0f, - .y = 0.8333333333333334f - }; - - hitbox_component_data->scale = (fvector2d_t) { - .x = 1.0f, - .y = 0.16666666666666666f - }; - } - - { - component_t *door_component = entity_new_component(door_entity, DOOR_COMPONENT); - if(!door_component) return_failure_int; - - door_component_data_t * door_component_data = door_component->data; - - door_component_data->topic_id = 0; - door_component_data->state = false; - - door_component_subscribe(door_component); - } - } - - /* ======== Door 2 ======== */ - { - entity_t *door2_entity = entity_manager_new_entity(1); - if(!door2_entity) return_failure_int; - - { - component_t *transform_component = entity_new_component(door2_entity, TRANSFORM_COMPONENT); - if(!transform_component) return_failure_int; - - transform_component_data_t *transform_component_data = transform_component->data; - - transform_component_data->bounds = (frect_t) { - .x = 240.0f, - .y = 30.0f, - .w = 32.0f, - .h = 48.0f - }; - } - - { - component_t *sprite_component = entity_new_component(door2_entity, SPRITE_COMPONENT); - if(!sprite_component) return_failure_int; - - sprite_component_data_t *sprite_component_data = sprite_component->data; - - asset_t *asset = asset_manager_load_asset("wooden_door_sheet", ASSET_TEXTURE); - if(!asset) return_failure_int; - - sprite_component_data->texture = asset->data; - } - - { - component_t *animation_system = entity_new_component(door2_entity, ANIMATION_SYSTEM); - if(!animation_system) return_failure_int; - - animation_system_data_t *animation_system_data = animation_system->data; - - animation_system_data->nb_frames = 6; - animation_system_data->current_frame_nb = 0; - animation_system_data->frame_delay_ms = WOODEN_DOOR_DEFAULT_ANIMATION_SPEED; - - animation_system_data->play = false; - animation_system_data->loop = false; - animation_system_data->reverse = false; - - if(animation_system_apply_changes(animation_system)) return_failure_int; - } - - { - component_t *hitbox_component = entity_new_component(door2_entity, HITBOX_COMPONENT); - if(!hitbox_component) return_failure_int; - - hitbox_component_data_t *hitbox_component_data = hitbox_component->data; - - hitbox_component_data->position = (fvector2d_t) { - .x = 0.0f, - .y = 0.8333333333333334f - }; - - hitbox_component_data->scale = (fvector2d_t) { - .x = 1.0f, - .y = 0.16666666666666666f - }; - } - - { - component_t *door_component = entity_new_component(door2_entity, DOOR_COMPONENT); - if(!door_component) return_failure_int; - - door_component_data_t * door_component_data = door_component->data; - - door_component_data->topic_id = 0; - door_component_data->state = false; - - door_component_subscribe(door_component); - } - } + if(map_load_entities(map_asset->data)) return_failure_int; game.is_running = true;