ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
MonoPtrHolder.hpp
1#pragma once
2
3#include "../Unity/PersistantSingleton.hpp"
4#include "../Utils/Il2cpp.hpp"
5#include "../ChatPlexSDK.hpp"
6
7#include <System/Collections/Generic/Dictionary_2.hpp>
8#include <UnityEngine/MonoBehaviour.hpp>
9#include <UnityEngine/Object.hpp>
10#include <UnityEngine/Sprite.hpp>
11
12#include <atomic>
13#include <map>
14
15namespace CP_SDK::Unity {
16
17 namespace _u
18 {
19 using namespace System::Collections::Generic;
20 using namespace UnityEngine;
21 }
22
24 class MonoPtrHolder : public _u::MonoBehaviour
25 {
26 CP_SDK_IL2CPP_INHERIT("CP_SDK.Unity", MonoPtrHolder, _u::MonoBehaviour);
27 CP_SDK_IL2CPP_DECLARE_CTOR(MonoPtrHolder);
28 CP_SDK_IL2CPP_DECLARE_DTOR_MONOBEHAVIOUR(MonoPtrHolder);
29 CP_SDK_UNITY_PERSISTANT_SINGLETON_NO_DESTROY_DECL(CP_SDK::Unity::MonoPtrHolder);
30
31 public:
33 class Wrapper
34 {
35 std::atomic_int32_t m_Count;
36
37 public:
38 Il2CppObject* Ptr;
39
41 void Grab();
43 void Drop();
44 };
45
46 private:
47 DECLARE_INSTANCE_FIELD(_u::List_1<Il2CppObject*>*, m_Pointers);
48
49 static std::map<Il2CppObject*, Wrapper*> m_PointersToWrapper;
50
51 public:
54 static Wrapper* GetOrRegister(Il2CppObject* p_Pointer);
57 static void Release(Il2CppObject* p_Pointer);
58
59 };
60
61}
62
63CP_SDK_IL2CPP_INHERIT_HELPERS(CP_SDK::Unity::MonoPtrHolder);
void Grab()
Grab a reference to this wrapper.
void Drop()
Drop a reference to this wrapper.
Il2Cpp pointers holder.
static void Release(Il2CppObject *p_Pointer)
Release a wrapper.
static Wrapper * GetOrRegister(Il2CppObject *p_Pointer)
Get or register a new wrapper.
Tools and extensions to interact with Unity on different layer & threads, load fonts/sprites/textures...