From be45cc10abc2d1937a7aab7bb9e0178c993ab8d7 Mon Sep 17 00:00:00 2001 From: Uladzislau Nikalayevich Date: Sun, 28 Jul 2024 17:14:47 +0300 Subject: [PATCH] Fix building OOP API --- Client/mods/deathmatch/logic/lua/CLuaMain.cpp | 1 + .../deathmatch/logic/luadefs/CLuaBuildingDefs.cpp | 15 +++++++++++---- .../deathmatch/logic/luadefs/CLuaBuildingDefs.h | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Client/mods/deathmatch/logic/lua/CLuaMain.cpp b/Client/mods/deathmatch/logic/lua/CLuaMain.cpp index 446fdc866e..6b794be016 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaMain.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaMain.cpp @@ -127,6 +127,7 @@ void CLuaMain::InitClasses(lua_State* luaVM) CLuaVehicleDefs::AddClass(luaVM); CLuaWaterDefs::AddClass(luaVM); CLuaWeaponDefs::AddClass(luaVM); + CLuaBuildingDefs::AddClass(luaVM); CLuaShared::AddClasses(luaVM); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.cpp index f45efbf09c..c40b526ab2 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.cpp @@ -30,10 +30,10 @@ void CLuaBuildingDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "create", "createBuilding"); - lua_registerclass(luaVM, "Building"); + lua_registerclass(luaVM, "Building", "Element"); } -CClientBuilding* CLuaBuildingDefs::CreateBuilding(lua_State* const luaVM, uint16_t modelId, CVector pos, CVector rot, std::optional interior) +CClientBuilding* CLuaBuildingDefs::CreateBuilding(lua_State* const luaVM, uint16_t modelId, CVector pos, std::optional rot, std::optional interior) { CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); @@ -48,11 +48,18 @@ CClientBuilding* CLuaBuildingDefs::CreateBuilding(lua_State* const luaVM, uint16 if (!CClientBuildingManager::IsValidPosition(pos)) throw std::invalid_argument("Position is outside of game world"); - ConvertDegreesToRadians(rot); + if (rot.has_value()) + { + ConvertDegreesToRadians(rot.value()); + } + else + { + rot.emplace(CVector(0, 0, 0)); + } m_pBuildingManager->ResizePoolIfNeeds(); - CClientBuilding* pBuilding = new CClientBuilding(m_pManager, INVALID_ELEMENT_ID, modelId, pos, rot, interior.value_or(0)); + CClientBuilding* pBuilding = new CClientBuilding(m_pManager, INVALID_ELEMENT_ID, modelId, pos, rot.value() , interior.value_or(0)); CClientEntity* pRoot = pResource->GetResourceDynamicEntity(); pBuilding->SetParent(pRoot); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.h index 628d320844..2bf211ff23 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaBuildingDefs.h @@ -19,7 +19,7 @@ class CLuaBuildingDefs : public CLuaDefs static void AddClass(lua_State* luaVM); // Buiding create funcs - static CClientBuilding* CreateBuilding(lua_State* const luaVM, uint16_t modelId, CVector pos, CVector rot, std::optional interior); + static CClientBuilding* CreateBuilding(lua_State* const luaVM, uint16_t modelId, CVector pos, std::optional rot, std::optional interior); static void RemoveAllGameBuildings(); static void RestoreGameBuildings(); };