Big big update
This commit is contained in:
@@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user