Working lua integration.

This commit is contained in:
Ulysse Cura 2026-09-20 21:06:22 +02:00
parent 7a9dc006d1
commit 96fbb318c0
6 changed files with 81 additions and 5 deletions

View File

@ -9,6 +9,9 @@ ASSETS := \
maps/dungeon_entry.map \ maps/dungeon_entry.map \
maps/dungeon_room_1.map maps/dungeon_room_1.map
LUA_SOURCES := \
enemy_system.lua
OBJECTS := $(ASSETS:%=$(BUILD_DIR)/$(notdir $(ASSETS_DIR))/%.o) OBJECTS := $(ASSETS:%=$(BUILD_DIR)/$(notdir $(ASSETS_DIR))/%.o)
ifeq ($(TOTAL_BUILD_FILES),) ifeq ($(TOTAL_BUILD_FILES),)

View File

@ -6,10 +6,12 @@
COMPONENT(TRANSFORM_COMPONENT, transform_component, DRAW) COMPONENT(TRANSFORM_COMPONENT, transform_component, DRAW)
COMPONENT(HITBOX_COMPONENT, hitbox_component, DRAW) COMPONENT(HITBOX_COMPONENT, hitbox_component, DRAW)
COMPONENT(INTERACT_COMPONENT, interact_component, DRAW) COMPONENT(INTERACT_COMPONENT, interact_component, DRAW)
COMPONENT(LUA_COMPONENT, lua_component, DRAW)
#else #else
COMPONENT(TRANSFORM_COMPONENT, transform_component, NO_DRAW) COMPONENT(TRANSFORM_COMPONENT, transform_component, NO_DRAW)
COMPONENT(HITBOX_COMPONENT, hitbox_component, NO_DRAW) COMPONENT(HITBOX_COMPONENT, hitbox_component, NO_DRAW)
COMPONENT(INTERACT_COMPONENT, interact_component, NO_DRAW) COMPONENT(INTERACT_COMPONENT, interact_component, NO_DRAW)
COMPONENT(LUA_COMPONENT, lua_component, NO_DRAW)
#endif // DEBUG >= 2 #endif // DEBUG >= 2
COMPONENT(PHYSICS_SYSTEM, physics_system, NO_DRAW) COMPONENT(PHYSICS_SYSTEM, physics_system, NO_DRAW)
@ -18,7 +20,6 @@ COMPONENT(ANIMATION_SYSTEM, animation_system, NO_DRAW)
COMPONENT(PLAYER_SYSTEM, player_system, NO_DRAW) COMPONENT(PLAYER_SYSTEM, player_system, NO_DRAW)
COMPONENT(LEVER_COMPONENT, lever_component, NO_DRAW) COMPONENT(LEVER_COMPONENT, lever_component, NO_DRAW)
COMPONENT(DOOR_COMPONENT, door_component, NO_DRAW) COMPONENT(DOOR_COMPONENT, door_component, NO_DRAW)
// COMPONENT(LUA_COMPONENT, lua_component, NO_DRAW)
// Add new components definition here // Add new components definition here
#undef COMPONENT #undef COMPONENT

View File

@ -1,6 +1,51 @@
#ifndef LUA_COMPONENT_H #include "lua_component.h"
#define LUA_COMPONENT_H
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include "game.h"
#include "ecs.h"
#include "memory_alloc.h"
#include "errors.h"
inline int lua_component_init(component_t *component)
{
lua_component_data_t *component_data = component->data;
#endif // LUA_COMPONENT_H component_data->lua_state = luaL_newstate();
luaL_openlibs(component_data->lua_state);
luaL_dostring(component_data->lua_state, "function f (a) print(a) end");
return EXIT_SUCCESS;
}
inline int lua_component_update(component_t *component __attribute__((unused)))
{
lua_component_data_t *component_data = component->data;
luaL_dostring(component_data->lua_state, "f(\"prout\")");
return EXIT_SUCCESS;
}
#if DEBUG >= 2
#include "display.h"
inline int lua_component_draw(const component_t *component)
{
return EXIT_SUCCESS;
}
#endif // DEBUG >= 2
inline int lua_component_destroy(component_t *component)
{
lua_component_data_t *component_data = component->data;
lua_close(component_data->lua_state);
free(component_data);
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,19 @@
#ifndef LUA_COMPONENT_H
#define LUA_COMPONENT_H
#include "ecs.h"
#include "lua.h"
#include "errors.h"
typedef struct lua_component_data_t {
lua_State *lua_state;
} lua_component_data_t;
int lua_component_init(component_t *component);
int lua_component_update(component_t *component);
#if DEBUG >= 2
int lua_component_draw(const component_t *component);
#endif // DEBUG >= 2
int lua_component_destroy(component_t *component);
#endif // LUA_COMPONENT_H

View File

@ -21,7 +21,7 @@ int game_init(void)
entity_manager_init(); entity_manager_init();
if(asset_manager_init()) return_failure_int; if(asset_manager_init()) return_failure_int;
asset_t *map_asset = asset_manager_load_asset("dungeon_room_1", ASSET_MAP); asset_t *map_asset = asset_manager_load_asset("dungeon_entry", ASSET_MAP);
if(!map_asset) return_failure_int; if(!map_asset) return_failure_int;
game.map = map_asset->data; game.map = map_asset->data;
@ -119,6 +119,14 @@ 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;
} }
/* ======== Enemy ======== */
{
entity_t *enemy_entity = entity_manager_new_entity(1);
if(!enemy_entity) return_failure_int;
if(!entity_new_component(enemy_entity, LUA_COMPONENT)) return_failure_int;
}
game.is_running = true; game.is_running = true;
return EXIT_SUCCESS; return EXIT_SUCCESS;