diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 0a416567..08b8dd4c 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -92665,7 +92665,7 @@ 0x00000071011f5f50,sub_71011F5F50,20,_ZN4ksys21MessageDispatcherBaseC2Ev 0x00000071011f5f64,nullsub_4672,4,_ZN4ksys21MessageDispatcherBaseD1Ev 0x00000071011f5f68,j__ZdlPv_1224,4,_ZN4ksys21MessageDispatcherBaseD0Ev -0x00000071011f5f6c,GlobalMessage::setGlobalPtr,4, +0x00000071011f5f6c,GlobalMessage::setGlobalPtr,4,_ZN4ksys21MessageDispatcherBase19setAsGlobalInstanceEv 0x00000071011f5f70,sub_71011F5F70,112,_ZNK4ksys21MessageDispatcherBase27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x00000071011f5fe0,sub_71011F5FE0,92,_ZNK4ksys21MessageDispatcherBase18getRuntimeTypeInfoEv 0x00000071011f603c,j_j_Struct1A::dtor_0,4, @@ -92681,17 +92681,17 @@ 0x00000071011f6474,sub_71011F6474,8, 0x00000071011f647c,sub_71011F647C,204, 0x00000071011f6548,sub_71011F6548,92, -0x00000071011f65a4,getGlobalMessagePtr,36, -0x00000071011f65c8,nullsub_4673,4, -0x00000071011f65cc,j__ZdlPv_1225,4, +0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys18MessageTransceiverC1Ev +0x00000071011f65c8,nullsub_4673,4,_ZN4ksys18MessageTransceiverD1Ev +0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys18MessageTransceiverD0Ev 0x00000071011f65d0,sub_71011F65D0,28, 0x00000071011f65ec,sub_71011F65EC,28, -0x00000071011f6608,sub_71011F6608,8, -0x00000071011f6610,sub_71011F6610,8, -0x00000071011f6618,sub_71011F6618,8, -0x00000071011f6620,sub_71011F6620,8, -0x00000071011f6628,getGlobalMessage,8, -0x00000071011f6630,GlobalMessage::setGlobalPtr_,16, +0x00000071011f6608,sub_71011F6608,8,_ZN4ksys18MessageTransceiver2m2Ev +0x00000071011f6610,sub_71011F6610,8,_ZN4ksys18MessageTransceiver2m3Ev +0x00000071011f6618,sub_71011F6618,8,_ZN4ksys18MessageTransceiver2m4Ev +0x00000071011f6620,sub_71011F6620,8,_ZN4ksys18MessageTransceiver2m5Ev +0x00000071011f6628,getGlobalMessage,8,_ZN4ksys18MessageTransceiver13getDispatcherEv +0x00000071011f6630,GlobalMessage::setGlobalPtr_,16,_ZN4ksys18MessageTransceiver19setGlobalDispatcherEPNS_21MessageDispatcherBaseE 0x00000071011f6640,sub_71011F6640,16, 0x00000071011f6650,j_j_Struct1A::dtor_1,4, 0x00000071011f6654,sub_71011F6654,36, diff --git a/src/KingSystem/ActorSystem/actAiParam.h b/src/KingSystem/ActorSystem/actAiParam.h index ea4a43b3..abab0b05 100644 --- a/src/KingSystem/ActorSystem/actAiParam.h +++ b/src/KingSystem/ActorSystem/actAiParam.h @@ -9,7 +9,7 @@ #include "KingSystem/ActorSystem/actAiClassDef.h" #include "KingSystem/ActorSystem/actBaseProcLink.h" -#include "KingSystem/Utils/Thread/MessageTransceiver.h" +#include "KingSystem/Utils/Thread/MessageTransceiverId.h" #include "KingSystem/Utils/Types.h" namespace ksys { diff --git a/src/KingSystem/Utils/CMakeLists.txt b/src/KingSystem/Utils/CMakeLists.txt index cd09b72e..887eeadf 100644 --- a/src/KingSystem/Utils/CMakeLists.txt +++ b/src/KingSystem/Utils/CMakeLists.txt @@ -9,7 +9,10 @@ target_sources(uking PRIVATE Thread/ManagedTaskHandle.h Thread/MessageDispatcherBase.cpp Thread/MessageDispatcherBase.h + Thread/MessageTransceiver.cpp Thread/MessageTransceiver.h + Thread/MessageTransceiverId.cpp + Thread/MessageTransceiverId.h Thread/Task.cpp Thread/Task.h Thread/TaskData.h diff --git a/src/KingSystem/Utils/Thread/MessageDispatcherBase.cpp b/src/KingSystem/Utils/Thread/MessageDispatcherBase.cpp index 838e2a51..f5c8aa41 100644 --- a/src/KingSystem/Utils/Thread/MessageDispatcherBase.cpp +++ b/src/KingSystem/Utils/Thread/MessageDispatcherBase.cpp @@ -1,4 +1,5 @@ #include "KingSystem/Utils/Thread/MessageDispatcherBase.h" +#include "KingSystem/Utils/Thread/MessageTransceiver.h" namespace ksys { @@ -6,4 +7,8 @@ MessageDispatcherBase::MessageDispatcherBase() = default; MessageDispatcherBase::~MessageDispatcherBase() = default; +void MessageDispatcherBase::setAsGlobalInstance() { + MessageTransceiver::setGlobalDispatcher(this); +} + } // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiver.cpp b/src/KingSystem/Utils/Thread/MessageTransceiver.cpp new file mode 100644 index 00000000..e5643150 --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageTransceiver.cpp @@ -0,0 +1,33 @@ +#include "KingSystem/Utils/Thread/MessageTransceiver.h" + +namespace ksys { + +MessageTransceiver::MessageTransceiver() = default; + +MessageTransceiver::~MessageTransceiver() = default; + +bool MessageTransceiver::m2() { + return false; +} + +bool MessageTransceiver::m3() { + return false; +} + +bool MessageTransceiver::m4() { + return false; +} + +bool MessageTransceiver::m5() { + return false; +} + +MessageDispatcherBase* MessageTransceiver::getDispatcher() { + return mDispatcher; +} + +void MessageTransceiver::setGlobalDispatcher(MessageDispatcherBase* dispatcher) { + sDispatcher = dispatcher; +} + +} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiver.h b/src/KingSystem/Utils/Thread/MessageTransceiver.h index f071483e..6d130120 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiver.h +++ b/src/KingSystem/Utils/Thread/MessageTransceiver.h @@ -2,34 +2,31 @@ #include -#include "KingSystem/Utils/Types.h" - namespace ksys { -struct MesTransceiverId { - MesTransceiverId() { reset(); } - ~MesTransceiverId() { reset(); } +class MessageDispatcherBase; +struct MesTransceiverId; - void reset() { - _0 = -1; - _4 = -1; - _8 = nullptr; - _10 = nullptr; - } +class MessageTransceiver { +public: + MessageTransceiver(); + virtual ~MessageTransceiver(); + bool checkX(); + bool checkY(); + virtual bool m2(); + virtual bool m3(); + virtual bool m4(); + virtual bool m5(); + virtual void* getSomePtr() = 0; + MessageDispatcherBase* getDispatcher(); - MesTransceiverId& operator=(const MesTransceiverId& other) { - _0 = other._0; - _4 = other._4; - _8 = other._8; - _10 = other._10; - return *this; - } + static void setGlobalDispatcher(MessageDispatcherBase* dispatcher); - s32 _0{}; - s32 _4{}; - void* _8{}; - void* _10{}; +private: + static MessageDispatcherBase* sDispatcher; + + MessageDispatcherBase* mDispatcher = sDispatcher; + MesTransceiverId* mId{}; }; -KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18); } // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverId.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverId.cpp new file mode 100644 index 00000000..0d768e1f --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageTransceiverId.cpp @@ -0,0 +1 @@ +#include "KingSystem/Utils/Thread/MessageTransceiverId.h" diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverId.h b/src/KingSystem/Utils/Thread/MessageTransceiverId.h new file mode 100644 index 00000000..f071483e --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageTransceiverId.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include "KingSystem/Utils/Types.h" + +namespace ksys { + +struct MesTransceiverId { + MesTransceiverId() { reset(); } + ~MesTransceiverId() { reset(); } + + void reset() { + _0 = -1; + _4 = -1; + _8 = nullptr; + _10 = nullptr; + } + + MesTransceiverId& operator=(const MesTransceiverId& other) { + _0 = other._0; + _4 = other._4; + _8 = other._8; + _10 = other._10; + return *this; + } + + s32 _0{}; + s32 _4{}; + void* _8{}; + void* _10{}; +}; +KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18); + +} // namespace ksys