Big big update

This commit is contained in:
2026-03-07 17:25:11 +03:00
parent 95daf12fc5
commit 79898c42d6
22 changed files with 423 additions and 47 deletions

View File

@@ -127,6 +127,19 @@ LuaPlus::LuaObject engineGetEntityFromID(lua_Integer id)
return entityTable;
}
LuaPlus::LuaObject engineFindEntityByName(const char* name)
{
Entity* entity = (Entity*)g_game->FindEntityByName(name);
if (!entity)
{
LuaPlus::LuaObject table;
table.AssignNil(GetLuaState());
return table;
}
return entity->GetLuaObject();
}
void engineAddEntityToWorld(LuaPlus::LuaObject& object)
{
LuaPlus::LuaObject cppclass = object["__object"];
@@ -184,6 +197,7 @@ void registerEngine()
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
engineTable.RegisterDirect("find_entity_by_name", &engineFindEntityByName);
engineTable.RegisterDirect("play_sound", &enginePlaySound);
engineTable.RegisterDirect("play_sound_3d", &enginePlaySound3D);
engineTable.RegisterDirect("get_delta", &engineGetDelta);
@@ -469,11 +483,15 @@ void Game::Init()
{
initializeLua();
initializeEntitiesTable();
luaCallFunction("sv_game_init");
}
void Game::InitForNewMap(const char* mapname)
{
LoadLevelXML(mapname);
luaCallFunction("sv_on_game_start");
}
void Game::LoadLevelXML(const char* mapname)
@@ -519,6 +537,9 @@ void Game::LoadLevelXML(const char* mapname)
// Create entity and expose it to the engine
Entity* entity = static_cast<Entity*>(Lua_CreateEntity(classname.as_string()));
if (!entityname.empty())
entity->SetName(entityname.as_string());
pugi::xml_node position = entitynode.child("Position");
if (position)
{
@@ -603,7 +624,7 @@ IEntityBase* Game::Lua_CreateEntity(const char* classname)
// create an table
LuaObject entityTable = GetLuaState().CreateTable();
entityTable.SetString("m_name", entityname);
entityTable.SetString("__private_name", entityname);
entityTable.SetInteger("m_id", entity->GetID());
// assign prototype
@@ -640,6 +661,22 @@ LuaPrototype* Game::Lua_FindPrototype(const char* classname)
return nullptr;
}
IEntityBase* Game::FindEntityByName(const char* name)
{
if (!g_world)
return nullptr;
int numEntities = g_world->GetNumEntities();
for (int i = 0; i < numEntities; i++)
{
Entity* entity = dynamic_cast<Entity*>(g_world->GetEntity(i));
if (entity && entity->GetName() == name)
return entity;
}
return nullptr;
}
void Game::Shutdown()
{
}