Loading entities from maps.

This commit is contained in:
Ulysse Cura 2026-08-16 14:26:10 +02:00
parent 73a3133547
commit 67ca898bcd
2 changed files with 6 additions and 258 deletions

@ -1 +1 @@
Subproject commit 4995e0757b6b8fc494b37b9d0ad669eff7f776df Subproject commit a9d88e50e71ed30570c72f3587be8f8899ca697f

View File

@ -6,6 +6,7 @@
#include "event_bus.h" #include "event_bus.h"
#include "ecs.h" #include "ecs.h"
#include "components.h" #include "components.h"
#include "map.h"
#include "inputs.h" #include "inputs.h"
#include "errors.h" #include "errors.h"
@ -20,7 +21,10 @@ int game_init(void)
if(!asset_manager_load_asset("tileset", ASSET_TEXTURE)) return_failure_int; if(!asset_manager_load_asset("tileset", ASSET_TEXTURE)) return_failure_int;
if(!asset_manager_load_asset("dungeon_room_1", ASSET_MAP)) return_failure_int; asset_t *map_asset = asset_manager_load_asset("dungeon_room_1", ASSET_MAP);
if(!map_asset) return_failure_int;
if(map_load_entities(map_asset->data)) return_failure_int;
/* ======== Player ======== */ /* ======== Player ======== */
{ {
@ -94,262 +98,6 @@ int game_init(void)
if(!entity_new_component(player_entity, PLAYER_SYSTEM)) return_failure_int; 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;
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);
}
}
game.is_running = true; game.is_running = true;