ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
ModuleBase.hpp
1#pragma once
2
3#include "UI/UIIl2cpp.hpp"
4#include "UI/ViewController.hpp"
5
6#include <string>
7
8#define CP_SDK_MODULE_BASE_INSTANCE_DECL(__Type) \
9 CP_SDK_NO_COPYMOVE_CTORS(__Type) \
10 private: \
11 static __Type* m_Instance; \
12 public: \
13 static __Type* Instance(); \
14 protected: \
15 void SetInstance(__Type* p_Instance) override;
16
17#define CP_SDK_MODULE_BASE_INSTANCE_IMPL(__Type) \
18 __Type* __Type::m_Instance = nullptr; \
19 __Type* __Type::Instance() { return m_Instance; } \
20 void __Type::SetInstance(__Type* p_Instance) { m_Instance = p_Instance; }
21
22namespace CP_SDK {
23
26 {
27 Integrated,
28 External
29 };
32 {
33 Never,
34 OnStart,
35 OnMenuSceneLoaded
36 };
37
40
43 {
44 CP_SDK_NO_COPYMOVE_CTORS(IModuleBase);
45
46 public:
53
54 public:
55 virtual EIModuleBaseType Type() const = 0;
56 virtual std::u16string_view Name() const = 0;
57 virtual std::u16string_view FancyName() const = 0;
58 virtual std::u16string_view Description() const = 0;
59 virtual std::u16string_view DocumentationURL() const = 0;
60 virtual bool UseChatFeatures() const = 0;
61 virtual bool IsEnabled() const = 0;
62 virtual void IsEnabled(bool p_Enabled) = 0;
63 virtual EIModuleBaseActivationType ActivationType() const = 0;
64
65 protected:
67 IModuleBase() = default;
69 virtual ~IModuleBase() { }
70
71 public:
74 virtual void SetEnabled(bool p_Enabled) = 0;
75
76 public:
81 virtual void OnApplicationExit() = 0;
82
83 public:
87
88 };
89
92
94 template<class t_Type> class ModuleBase :
95 public IModuleBase
96 {
97 CP_SDK_NO_COPYMOVE_CTORS(ModuleBase);
98
99 protected:
102 : m_WasEnabled(false)
103 {
104
105 }
107 virtual ~ModuleBase()
108 {
109
110 }
111
112 public:
115 void SetEnabled(bool p_Enabled) override
116 {
117 IsEnabled(p_Enabled);
118
119 if (IsEnabled() && !m_WasEnabled) Enable();
120 if (!IsEnabled() && m_WasEnabled) Disable();
121 }
122
123 public:
127 {
128 if (!m_WasEnabled && IsEnabled() && ActivationType() == p_Kind)
129 Enable();
130 }
132 void OnApplicationExit() override
133 {
134 if (m_WasEnabled && IsEnabled())
135 Disable();
136 }
137
138 private:
140 void Enable()
141 {
142 if (m_WasEnabled)
143 return;
144
145 m_WasEnabled = true;
146 SetInstance(reinterpret_cast<t_Type*>(this));
147 OnEnable();
148 }
150 void Disable()
151 {
152 if (!m_WasEnabled)
153 return;
154
155 OnDisable();
156 SetInstance(nullptr);
157 m_WasEnabled = false;
158 }
159
160 protected:
162 virtual void SetInstance(t_Type* p_Instance) = 0;
163
165 virtual void OnEnable() = 0;
167 virtual void OnDisable() = 0;
168
169 private:
170 bool m_WasEnabled;
171
172 };
173
174}
Module base interface.
virtual void SetEnabled(bool p_Enabled)=0
Set enabled.
virtual t_InitialViews GetSettingsViewControllers()
Get Module settings UI.
virtual void CheckForActivation(EIModuleBaseActivationType p_Kind)=0
Check for module activation.
IModuleBase()=default
Constructor.
virtual ~IModuleBase()
Destructor.
virtual void OnApplicationExit()=0
On application exit.
Module base interface.
void OnApplicationExit() override
On application exit.
virtual void OnEnable()=0
Enable the Module.
virtual void OnDisable()=0
Disable the Module.
void SetEnabled(bool p_Enabled) override
Set enabled.
virtual ~ModuleBase()
Destructor.
ModuleBase()
Constructor.
virtual void SetInstance(t_Type *p_Instance)=0
Set singleton instance.
void CheckForActivation(EIModuleBaseActivationType p_Kind) override
Check for module activation.
ChatPlex SDK game agnostic namepace.
EIModuleBaseType
Module type.
EIModuleBaseActivationType
Activation type kind.