From d05d09be8b9bd1327e37631411fa1e3b16c4dbb7 Mon Sep 17 00:00:00 2001 From: FileEX Date: Fri, 10 Jan 2025 22:25:38 +0100 Subject: [PATCH] Refactor client CLuaBlipDefs to use new parser (PR #3536) --- .../deathmatch/logic/CClientRadarMarker.h | 10 +- .../logic/CClientRadarMarkerManager.h | 2 +- .../deathmatch/logic/luadefs/CLuaBlipDefs.cpp | 452 +++++------------- .../deathmatch/logic/luadefs/CLuaBlipDefs.h | 31 +- 4 files changed, 133 insertions(+), 362 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientRadarMarker.h b/Client/mods/deathmatch/logic/CClientRadarMarker.h index 0963d229db9..c2709e00ee1 100644 --- a/Client/mods/deathmatch/logic/CClientRadarMarker.h +++ b/Client/mods/deathmatch/logic/CClientRadarMarker.h @@ -39,13 +39,13 @@ class CClientRadarMarker final : public CClientEntity void SetPosition(const CVector& vecPosition); void GetPosition(CVector& vecPosition) const; - unsigned short GetScale() { return m_usScale; }; + unsigned short GetScale() const noexcept { return m_usScale; } void SetScale(unsigned short usScale); - SColor GetColor() const { return m_Color; } + SColor GetColor() const noexcept { return m_Color; } void SetColor(const SColor color); - unsigned long GetSprite() const { return m_ulSprite; }; + unsigned long GetSprite() const noexcept { return m_ulSprite; } void SetSprite(unsigned long ulSprite); bool IsVisible() const { return m_bIsVisible; }; @@ -54,10 +54,10 @@ class CClientRadarMarker final : public CClientEntity void SetDimension(unsigned short usDimension) override; void RelateDimension(unsigned short usDimension); - short GetOrdering() { return m_sOrdering; } + short GetOrdering() const noexcept { return m_sOrdering; } void SetOrdering(short sOrdering); - unsigned short GetVisibleDistance() { return m_usVisibleDistance; } + unsigned short GetVisibleDistance() const noexcept { return m_usVisibleDistance; } void SetVisibleDistance(unsigned short usVisibleDistance) { m_usVisibleDistance = usVisibleDistance; } bool IsInVisibleDistance(); diff --git a/Client/mods/deathmatch/logic/CClientRadarMarkerManager.h b/Client/mods/deathmatch/logic/CClientRadarMarkerManager.h index 0fa2a303da3..8fd0450ca22 100644 --- a/Client/mods/deathmatch/logic/CClientRadarMarkerManager.h +++ b/Client/mods/deathmatch/logic/CClientRadarMarkerManager.h @@ -36,7 +36,7 @@ class CClientRadarMarkerManager std::list::const_iterator IterEnd() { return m_Markers.end(); }; bool Exists(CClientRadarMarker* pMarker); - static bool IsValidIcon(unsigned long ulIcon) { return ulIcon <= RADAR_MARKER_LIMIT; } + static bool IsValidIcon(unsigned long ulIcon) noexcept { return ulIcon <= RADAR_MARKER_LIMIT; } private: void AddToList(CClientRadarMarker* pMarker) { m_Markers.push_back(pMarker); }; diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp index 7abffd1df02..5eaaadca231 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp @@ -10,405 +10,171 @@ *****************************************************************************/ #include "StdInc.h" +#include "lua/CLuaFunctionParser.h" -void CLuaBlipDefs::LoadFunctions() -{ - constexpr static const std::pair functions[]{ - {"createBlip", CreateBlip}, - {"createBlipAttachedTo", CreateBlipAttachedTo}, - {"getBlipIcon", GetBlipIcon}, - {"getBlipSize", GetBlipSize}, - {"getBlipColor", GetBlipColor}, - {"getBlipOrdering", GetBlipOrdering}, - {"getBlipVisibleDistance", GetBlipVisibleDistance}, - - {"setBlipIcon", SetBlipIcon}, - {"setBlipSize", SetBlipSize}, - {"setBlipColor", SetBlipColor}, - {"setBlipOrdering", SetBlipOrdering}, - {"setBlipVisibleDistance", SetBlipVisibleDistance}, - }; +static constexpr std::uint8_t MAX_BLIP_SIZE = 25; - // Add functions - for (const auto& [name, func] : functions) - CLuaCFunctions::AddFunction(name, func); -} - -void CLuaBlipDefs::AddClass(lua_State* luaVM) +std::variant CLuaBlipDefs::CreateBlip(lua_State* luaVM, const CVector vecPosition, std::optional icon, std::optional size, std::optional r, std::optional g, std::optional b, std::optional a, std::optional ordering, std::optional visibleDistance) { - lua_newclass(luaVM); + if (icon.has_value() && !CClientRadarMarkerManager::IsValidIcon(icon.value())) + throw std::invalid_argument("Invalid icon"); - lua_classfunction(luaVM, "create", "createBlip"); - lua_classfunction(luaVM, "createAttachedTo", "createBlipAttachedTo"); + if (size.has_value() && size.value() > MAX_BLIP_SIZE) + { + m_pScriptDebugging->LogWarning(luaVM, SString("Blip size beyond %i is no longer supported (got %i). It will be clamped between 0 and %i.", MAX_BLIP_SIZE, size.value(), MAX_BLIP_SIZE)); + size = MAX_BLIP_SIZE; + } - lua_classfunction(luaVM, "getColor", "getBlipColor"); - lua_classfunction(luaVM, "getVisibleDistance", "getBlipVisibleDistance"); - lua_classfunction(luaVM, "getOrdering", "getBlipOrdering"); - lua_classfunction(luaVM, "getSize", "getBlipSize"); - lua_classfunction(luaVM, "getIcon", "getBlipIcon"); + CResource* resource = &lua_getownerresource(luaVM); + if (!resource) + return false; - lua_classfunction(luaVM, "setColor", "setBlipColor"); - lua_classfunction(luaVM, "setVisibleDistance", "setBlipVisibleDistance"); - lua_classfunction(luaVM, "setOrdering", "setBlipOrdering"); - lua_classfunction(luaVM, "setSize", "setBlipSize"); - lua_classfunction(luaVM, "setIcon", "setBlipIcon"); + CClientRadarMarker* radarMarker = CStaticFunctionDefinitions::CreateBlip(*resource, vecPosition, icon.value_or(0), size.value_or(2), SColorRGBA(r.value_or(255), g.value_or(0), b.value_or(0), a.value_or(255)), ordering.value_or(0), visibleDistance.value_or(16383)); + if (!radarMarker) + return false; - lua_classvariable(luaVM, "icon", "setBlipIcon", "getBlipIcon"); - lua_classvariable(luaVM, "size", "setBlipSize", "getBlipSize"); - lua_classvariable(luaVM, "ordering", "setBlipOrdering", "getBlipOrdering"); - lua_classvariable(luaVM, "visibleDistance", "setBlipVisibleDistance", "getBlipVisibleDistance"); - // lua_classvariable ( luaVM, "color", "setBlipColor", "getBlipColor" ); + if (CElementGroup* elementGroup = resource->GetElementGroup()) + elementGroup->Add(radarMarker); - lua_registerclass(luaVM, "Blip", "Element"); + return radarMarker; } -int CLuaBlipDefs::CreateBlip(lua_State* luaVM) +std::variant CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM, CClientEntity* entity, std::optional icon, std::optional size, std::optional r, std::optional g, std::optional b, std::optional a, std::optional ordering, std::optional visibleDistance) { - CVector vecPosition; - unsigned char ucIcon = 0; - int iSize = 2; - SColorRGBA color(255, 0, 0, 255); - int iOrdering = 0; - int iVisibleDistance = 16383; - CScriptArgReader argStream(luaVM); - argStream.ReadVector3D(vecPosition); - argStream.ReadNumber(ucIcon, 0); - argStream.ReadNumber(iSize, 2); - argStream.ReadNumber(color.R, 255); - argStream.ReadNumber(color.G, 0); - argStream.ReadNumber(color.B, 0); - argStream.ReadNumber(color.A, 255); - argStream.ReadNumber(iOrdering, 0); - argStream.ReadNumber(iVisibleDistance, 16383); - - if (!CClientRadarMarkerManager::IsValidIcon(ucIcon)) + if (icon.has_value() && !CClientRadarMarkerManager::IsValidIcon(icon.value())) + throw std::invalid_argument("Invalid icon"); + + if (size.has_value() && size.value() > MAX_BLIP_SIZE) { - argStream.SetCustomError("Invalid icon"); + m_pScriptDebugging->LogWarning(luaVM, SString("Blip size beyond %i is no longer supported (got %i). It will be clamped between 0 and %i.", MAX_BLIP_SIZE, size.value(), MAX_BLIP_SIZE)); + size = MAX_BLIP_SIZE; } - if (iSize < 0 || iSize > 25) - argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize)); + CResource* resource = &lua_getownerresource(luaVM); + if (!resource) + return false; - if (!argStream.HasErrors()) - { - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - if (pLuaMain) - { - CResource* pResource = pLuaMain->GetResource(); - if (pResource) - { - unsigned char ucSize = Clamp(0, iSize, 25); - short sOrdering = Clamp(-32768, iOrdering, 32767); - unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535); - - // Create the blip - CClientRadarMarker* pMarker = - CStaticFunctionDefinitions::CreateBlip(*pResource, vecPosition, ucIcon, ucSize, color, sOrdering, usVisibleDistance); - if (pMarker) - { - CElementGroup* pGroup = pResource->GetElementGroup(); - if (pGroup) - { - pGroup->Add(pMarker); - } - - lua_pushelement(luaVM, pMarker); - return 1; - } - } - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + CClientRadarMarker* radarMarker = CStaticFunctionDefinitions::CreateBlipAttachedTo(*resource, *entity, icon.value_or(0), size.value_or(2), SColorRGBA(r.value_or(255), g.value_or(0), b.value_or(0), a.value_or(255)), ordering.value_or(0), visibleDistance.value_or(16383)); + if (!radarMarker) + return false; + + if (CElementGroup* elementGroup = resource->GetElementGroup()) + elementGroup->Add(radarMarker); - lua_pushboolean(luaVM, false); - return 1; + return radarMarker; } -int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM) +auto CLuaBlipDefs::GetBlipIcon(CClientRadarMarker* const radarMarker) noexcept { - CClientEntity* pEntity = NULL; - // Default colors and size - unsigned char ucIcon = 0; - int iSize = 2; - SColorRGBA color(255, 0, 0, 255); - int iOrdering = 0; - int iVisibleDistance = 16383; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(ucIcon, 0); - argStream.ReadNumber(iSize, 2); - argStream.ReadNumber(color.R, 255); - argStream.ReadNumber(color.G, 0); - argStream.ReadNumber(color.B, 0); - argStream.ReadNumber(color.A, 255); - argStream.ReadNumber(iOrdering, 0); - argStream.ReadNumber(iVisibleDistance, 16383); - - if (!CClientRadarMarkerManager::IsValidIcon(ucIcon)) - { - argStream.SetCustomError("Invalid icon"); - } - - if (iSize < 0 || iSize > 25) - argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize)); - - if (!argStream.HasErrors()) - { - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - if (pLuaMain) - { - CResource* pResource = pLuaMain->GetResource(); - if (pResource) - { - unsigned char ucSize = Clamp(0, iSize, 25); - short sOrdering = Clamp(-32768, iOrdering, 32767); - unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535); - - // Create the blip - CClientRadarMarker* pMarker = - CStaticFunctionDefinitions::CreateBlipAttachedTo(*pResource, *pEntity, ucIcon, ucSize, color, sOrdering, usVisibleDistance); - if (pMarker) - { - CElementGroup* pGroup = pResource->GetElementGroup(); - if (pGroup) - { - pGroup->Add(pMarker); - } - lua_pushelement(luaVM, pMarker); - return 1; - } - } - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return static_cast(radarMarker->GetSprite()); } -int CLuaBlipDefs::GetBlipIcon(lua_State* luaVM) +auto CLuaBlipDefs::GetBlipSize(CClientRadarMarker* const radarMarker) noexcept { - CClientRadarMarker* pMarker = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pMarker); - - if (!argStream.HasErrors()) - { - unsigned char ucIcon = static_cast(pMarker->GetSprite()); - lua_pushnumber(luaVM, ucIcon); - return 1; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return radarMarker->GetScale(); } -int CLuaBlipDefs::GetBlipSize(lua_State* luaVM) +auto CLuaBlipDefs::GetBlipColor(CClientRadarMarker* radarMarker) noexcept { - CClientRadarMarker* pMarker = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pMarker); - - if (!argStream.HasErrors()) - { - unsigned char ucSize = static_cast(pMarker->GetScale()); - lua_pushnumber(luaVM, ucSize); - return 1; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + SColor color = radarMarker->GetColor(); + return CLuaMultiReturn{color.R, color.G, color.B, color.A}; } -int CLuaBlipDefs::GetBlipColor(lua_State* luaVM) +auto CLuaBlipDefs::GetBlipOrdering(CClientRadarMarker* radarMarker) noexcept { - CClientRadarMarker* pMarker = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pMarker); - - if (!argStream.HasErrors()) - { - SColor color = pMarker->GetColor(); - lua_pushnumber(luaVM, color.R); - lua_pushnumber(luaVM, color.G); - lua_pushnumber(luaVM, color.B); - lua_pushnumber(luaVM, color.A); - return 4; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return radarMarker->GetOrdering(); } -int CLuaBlipDefs::GetBlipOrdering(lua_State* luaVM) +auto CLuaBlipDefs::GetBlipVisibleDistance(CClientRadarMarker* radarMarker) noexcept { - CClientRadarMarker* pMarker = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pMarker); - - if (!argStream.HasErrors()) - { - short sOrdering = pMarker->GetOrdering(); - lua_pushnumber(luaVM, sOrdering); - return 1; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return radarMarker->GetVisibleDistance(); } -int CLuaBlipDefs::GetBlipVisibleDistance(lua_State* luaVM) +bool CLuaBlipDefs::SetBlipIcon(CClientRadarMarker* radarMarker, std::uint8_t icon) { - CClientRadarMarker* pMarker = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pMarker); - - if (!argStream.HasErrors()) - { - unsigned short usVisibleDistance = pMarker->GetVisibleDistance(); - lua_pushnumber(luaVM, usVisibleDistance); - return 1; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + if (!CClientRadarMarkerManager::IsValidIcon(icon)) + throw std::invalid_argument("Invalid icon"); - lua_pushboolean(luaVM, false); - return 1; + return CStaticFunctionDefinitions::SetBlipIcon(*radarMarker, icon); } -int CLuaBlipDefs::SetBlipIcon(lua_State* luaVM) +bool CLuaBlipDefs::SetBlipSize(lua_State* luaVM, CClientRadarMarker* radarMarker, std::uint8_t size) { - CClientEntity* pEntity = NULL; - unsigned char ucIcon = 0; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(ucIcon); - - if (!argStream.HasErrors()) + if (size > MAX_BLIP_SIZE) { - if (CStaticFunctionDefinitions::SetBlipIcon(*pEntity, ucIcon)) - { - lua_pushboolean(luaVM, true); - return 1; - } + m_pScriptDebugging->LogWarning(luaVM, SString("Blip size beyond %i is no longer supported (got %i). It will be clamped between 0 and %i.", MAX_BLIP_SIZE, size, MAX_BLIP_SIZE)); + size = MAX_BLIP_SIZE; } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - return 1; + return CStaticFunctionDefinitions::SetBlipSize(*radarMarker, size); } -int CLuaBlipDefs::SetBlipSize(lua_State* luaVM) +bool CLuaBlipDefs::SetBlipColor(CClientRadarMarker* radarMarker, std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a) { - CClientEntity* pEntity = NULL; - int iSize = 0; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(iSize); - - if (iSize < 0 || iSize > 25) - argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize)); - - if (!argStream.HasErrors()) - { - unsigned char ucSize = Clamp(0, iSize, 25); - - if (CStaticFunctionDefinitions::SetBlipSize(*pEntity, ucSize)) - { - lua_pushboolean(luaVM, true); - return 1; - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return CStaticFunctionDefinitions::SetBlipColor(*radarMarker, SColorRGBA(r, g, b, a)); } -int CLuaBlipDefs::SetBlipColor(lua_State* luaVM) +bool CLuaBlipDefs::SetBlipOrdering(CClientRadarMarker* radarMarker, std::int16_t ordering) { - CClientEntity* pEntity = NULL; - SColor color; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(color.R); - argStream.ReadNumber(color.G); - argStream.ReadNumber(color.B); - argStream.ReadNumber(color.A); - - if (!argStream.HasErrors()) - { - if (CStaticFunctionDefinitions::SetBlipColor(*pEntity, color)) - { - lua_pushboolean(luaVM, true); - return 1; - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushboolean(luaVM, false); - return 1; + return CStaticFunctionDefinitions::SetBlipOrdering(*radarMarker, ordering); } -int CLuaBlipDefs::SetBlipOrdering(lua_State* luaVM) +bool CLuaBlipDefs::SetBlipVisibleDistance(CClientRadarMarker* radarMarker, std::uint16_t visibleDistance) { - CClientEntity* pEntity = NULL; - int iOrdering; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(iOrdering); - - if (!argStream.HasErrors()) - { - short sOrdering = Clamp(-32768, iOrdering, 32767); + return CStaticFunctionDefinitions::SetBlipVisibleDistance(*radarMarker, visibleDistance); +} - if (CStaticFunctionDefinitions::SetBlipOrdering(*pEntity, sOrdering)) - { - lua_pushboolean(luaVM, true); - return 1; - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); +void CLuaBlipDefs::LoadFunctions() +{ + constexpr static const std::pair functions[]{ + // Create functions + {"createBlip", ArgumentParserWarn}, + {"createBlipAttachedTo", ArgumentParserWarn}, + + // Get functions + {"getBlipIcon", ArgumentParserWarn}, + {"getBlipSize", ArgumentParserWarn}, + {"getBlipColor", ArgumentParserWarn}, + {"getBlipOrdering", ArgumentParserWarn}, + {"getBlipVisibleDistance", ArgumentParserWarn}, + + // Set functions + {"setBlipIcon", ArgumentParserWarn}, + {"setBlipSize", ArgumentParserWarn}, + {"setBlipColor", ArgumentParserWarn}, + {"setBlipOrdering", ArgumentParserWarn}, + {"setBlipVisibleDistance", ArgumentParserWarn}, + }; - lua_pushboolean(luaVM, false); - return 1; + // Add functions + for (const auto& [name, func] : functions) + CLuaCFunctions::AddFunction(name, func); } -int CLuaBlipDefs::SetBlipVisibleDistance(lua_State* luaVM) +void CLuaBlipDefs::AddClass(lua_State* luaVM) { - CClientEntity* pEntity = NULL; - int iVisibleDistance; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pEntity); - argStream.ReadNumber(iVisibleDistance); + lua_newclass(luaVM); - if (!argStream.HasErrors()) - { - unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535); + lua_classfunction(luaVM, "create", "createBlip"); + lua_classfunction(luaVM, "createAttachedTo", "createBlipAttachedTo"); - if (CStaticFunctionDefinitions::SetBlipVisibleDistance(*pEntity, usVisibleDistance)) - { - lua_pushboolean(luaVM, true); - return 1; - } - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_classfunction(luaVM, "getColor", "getBlipColor"); + lua_classfunction(luaVM, "getVisibleDistance", "getBlipVisibleDistance"); + lua_classfunction(luaVM, "getOrdering", "getBlipOrdering"); + lua_classfunction(luaVM, "getSize", "getBlipSize"); + lua_classfunction(luaVM, "getIcon", "getBlipIcon"); - lua_pushboolean(luaVM, false); - return 1; + lua_classfunction(luaVM, "setColor", "setBlipColor"); + lua_classfunction(luaVM, "setVisibleDistance", "setBlipVisibleDistance"); + lua_classfunction(luaVM, "setOrdering", "setBlipOrdering"); + lua_classfunction(luaVM, "setSize", "setBlipSize"); + lua_classfunction(luaVM, "setIcon", "setBlipIcon"); + + lua_classvariable(luaVM, "icon", "setBlipIcon", "getBlipIcon"); + lua_classvariable(luaVM, "size", "setBlipSize", "getBlipSize"); + lua_classvariable(luaVM, "ordering", "setBlipOrdering", "getBlipOrdering"); + lua_classvariable(luaVM, "visibleDistance", "setBlipVisibleDistance", "getBlipVisibleDistance"); + // TODO add oop color variable + + lua_registerclass(luaVM, "Blip", "Element"); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.h index 45c62397bb9..a82a218c9b3 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.h @@ -18,17 +18,22 @@ class CLuaBlipDefs : public CLuaDefs static void LoadFunctions(); static void AddClass(lua_State* luaVM); - LUA_DECLARE(CreateBlip); - LUA_DECLARE(CreateBlipAttachedTo); - LUA_DECLARE(GetBlipIcon); - LUA_DECLARE(GetBlipSize); - LUA_DECLARE(GetBlipColor); - LUA_DECLARE(GetBlipOrdering); - LUA_DECLARE(GetBlipVisibleDistance); +private: + // Create functions + static std::variant CreateBlip(lua_State* luaVM, const CVector vecPosition, std::optional icon, std::optional size, std::optional r, std::optional g, std::optional b, std::optional a, std::optional ordering, std::optional visibleDistance); + static std::variant CreateBlipAttachedTo(lua_State* luaVM, CClientEntity* entity, std::optional icon, std::optional size, std::optional r, std::optional g, std::optional b, std::optional a, std::optional ordering, std::optional visibleDistance); - LUA_DECLARE(SetBlipIcon); - LUA_DECLARE(SetBlipSize); - LUA_DECLARE(SetBlipColor); - LUA_DECLARE(SetBlipOrdering); - LUA_DECLARE(SetBlipVisibleDistance); -}; \ No newline at end of file + // Get functions + static auto GetBlipIcon(CClientRadarMarker* radarMarker) noexcept; + static auto GetBlipSize(CClientRadarMarker* radarMarker) noexcept; + static auto GetBlipColor(CClientRadarMarker* radarMarker) noexcept; + static auto GetBlipOrdering(CClientRadarMarker* radarMarker) noexcept; + static auto GetBlipVisibleDistance(CClientRadarMarker* radarMarker) noexcept; + + // Set functions + static bool SetBlipIcon(CClientRadarMarker* radarMarker, std::uint8_t icon); + static bool SetBlipSize(lua_State* luaVM, CClientRadarMarker* radarMarker, std::uint8_t size); + static bool SetBlipColor(CClientRadarMarker* radarMarker, std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a); + static bool SetBlipOrdering(CClientRadarMarker* radarMarker, std::int16_t ordering); + static bool SetBlipVisibleDistance(CClientRadarMarker* radarMarker, std::uint16_t visibleDistance); +};