Compare commits

..

3 Commits

Author SHA1 Message Date
fallenoak
6e1eb93ff9
feat(ui): implement post-token-parsing logic in Script_GetGUIDFromToken
Some checks are pending
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:cl compiler_name:MSVC cxx:cl os:windows-latest system_name:Windows test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:clang compiler_name:Clang cxx:clang++ os:macos-latest system_name:macOS test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:gcc compiler_name:GCC cxx:g++ os:ubuntu-latest system_name:Linux test_path:WhoaTest]) (push) Waiting to run
2026-02-01 20:22:56 -06:00
fallenoak
43cb20cd0f
feat(ui): add CGGameUI::IsRaidMemberOrPet 2026-02-01 20:22:17 -06:00
fallenoak
99c00ade9b
feat(ui): add CGGameUI::GetCurrentObjectTrack 2026-02-01 20:16:33 -06:00
4 changed files with 55 additions and 5 deletions

View File

@ -21,9 +21,10 @@
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include <common/MD5.hpp> #include <common/MD5.hpp>
WOWGUID CGGameUI::s_currentObjectTrack;
CScriptObject* CGGameUI::s_gameTooltip; CScriptObject* CGGameUI::s_gameTooltip;
CSimpleTop* CGGameUI::s_simpleTop;
WOWGUID CGGameUI::s_lockedTarget; WOWGUID CGGameUI::s_lockedTarget;
CSimpleTop* CGGameUI::s_simpleTop;
void LoadScriptFunctions() { void LoadScriptFunctions() {
// TODO // TODO
@ -58,6 +59,10 @@ void LoadScriptFunctions() {
// TODO // TODO
} }
WOWGUID& CGGameUI::GetCurrentObjectTrack() {
return CGGameUI::s_currentObjectTrack;
}
WOWGUID& CGGameUI::GetLockedTarget() { WOWGUID& CGGameUI::GetLockedTarget() {
return CGGameUI::s_lockedTarget; return CGGameUI::s_lockedTarget;
} }
@ -155,6 +160,12 @@ int32_t CGGameUI::IsRaidMember(const WOWGUID& guid) {
return false; return false;
} }
int32_t CGGameUI::IsRaidMemberOrPet(const WOWGUID& guid) {
// TODO
return false;
}
void CGGameUI::RegisterFrameFactories() { void CGGameUI::RegisterFrameFactories() {
FrameXML_RegisterFactory("WorldFrame", &CGWorldFrame::Create, true); FrameXML_RegisterFactory("WorldFrame", &CGWorldFrame::Create, true);
FrameXML_RegisterFactory("GameTooltip", &CGTooltip::Create, false); FrameXML_RegisterFactory("GameTooltip", &CGTooltip::Create, false);

View File

@ -13,13 +13,16 @@ class CGGameUI {
static CSimpleTop* s_simpleTop; static CSimpleTop* s_simpleTop;
// Static functions // Static functions
static WOWGUID& GetCurrentObjectTrack();
static WOWGUID& GetLockedTarget(); static WOWGUID& GetLockedTarget();
static void Initialize(); static void Initialize();
static void InitializeGame(); static void InitializeGame();
static int32_t IsRaidMember(const WOWGUID& guid); static int32_t IsRaidMember(const WOWGUID& guid);
static int32_t IsRaidMemberOrPet(const WOWGUID& guid);
static void RegisterFrameFactories(); static void RegisterFrameFactories();
private: private:
static WOWGUID s_currentObjectTrack;
static WOWGUID s_lockedTarget; static WOWGUID s_lockedTarget;
}; };

View File

@ -3,6 +3,20 @@
#include "ui/game/CGGameUI.hpp" #include "ui/game/CGGameUI.hpp"
#include <storm/String.hpp> #include <storm/String.hpp>
namespace {
bool ParseTrailingTokens(const char* token, WOWGUID& guid, CGPlayer_C* player) {
// TODO
return true;
}
}
bool Script_GetGUIDFromString(const char*& token, WOWGUID& guid) {
// TODO
return true;
}
bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget) { bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget) {
auto activePlayer = static_cast<CGPlayer_C*>(ClntObjMgrObjectPtr(ClntObjMgrGetActivePlayer(), TYPE_PLAYER, __FILE__, __LINE__)); auto activePlayer = static_cast<CGPlayer_C*>(ClntObjMgrObjectPtr(ClntObjMgrGetActivePlayer(), TYPE_PLAYER, __FILE__, __LINE__));
@ -118,7 +132,11 @@ bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTar
else if (!SStrCmpI(parseToken, "mouseover", 9)) { else if (!SStrCmpI(parseToken, "mouseover", 9)) {
parseToken += 9; parseToken += 9;
// TODO auto trackedObjectGuid = CGGameUI::GetCurrentObjectTrack();
if (ClntObjMgrObjectPtr(trackedObjectGuid, TYPE_UNIT, __FILE__, __LINE__) || CGGameUI::IsRaidMemberOrPet(trackedObjectGuid)) {
guid = trackedObjectGuid;
}
} }
// focus - focus target // focus - focus target
@ -149,9 +167,25 @@ bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTar
guid = -1; guid = -1;
} }
// TODO ParseTrailingTokens // Token string was fully parsed or GUID was determined and token string potentially includes
// TODO Script_GetGUIDFromString // trailing tokens
// TODO guid -2 if ((*parseToken == '\0' || guid) && ParseTrailingTokens(parseToken, guid, activePlayer)) {
if (!guid) {
guid = -2;
}
return true;
}
// Token string was either not parsed or only partially parsed and GUID was not determined
if (!guid && Script_GetGUIDFromString(token, guid) && ParseTrailingTokens(token, guid, activePlayer)) {
if (!guid) {
guid = -2;
}
return true;
}
// GUID was not successfully determined
return false; return false;
} }

View File

@ -3,6 +3,8 @@
#include "util/GUID.hpp" #include "util/GUID.hpp"
bool Script_GetGUIDFromString(const char*& token, WOWGUID& guid);
bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget); bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget);
#endif #endif