ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
FlowCoordinator.hpp
1#pragma once
2
3#include "IFlowCoordinator.hpp"
4
5#include <map>
6
7#include <UnityEngine/GameObject.hpp>
8
9#define CP_SDK_UI_FLOW_COORDINATOR_INSTANCE() public: static CP_SDK::Utils::MonoPtr<___TargetType>& Instance() { return _Instance<___TargetType>(); }
10#define CP_SDK_UI_FLOW_COORDINATOR_DESTROY() public: static void Destroy() { _Destroy <___TargetType>(); }
11
12namespace CP_SDK::UI {
13
14 namespace _u
15 {
16 using namespace System;
17 using namespace UnityEngine;
18 }
19 namespace _v
20 {
21 using namespace CP_SDK::Utils;
22 }
23
26 {
27 CP_SDK_IL2CPP_INHERIT("CP_SDK.UI", FlowCoordinator, IFlowCoordinator);
28 CP_SDK_IL2CPP_DECLARE_CTOR_CHILD(FlowCoordinator);
29 CP_SDK_IL2CPP_DECLARE_DTOR_MONOBEHAVIOUR_CHILD(FlowCoordinator);
30
31 private:
32 static std::map<_u::Type*, _v::MonoPtr<FlowCoordinator>> m_Instances;
33
34 public:
35 template<class t_Base> requires(std::is_assignable_v<FlowCoordinator*&, t_Base*>)
36 static _v::MonoPtr<t_Base>& _Instance()
37 {
38 auto l_Type = reinterpret_cast<_u::Type*>(csTypeOf(t_Base*));
39 if (l_Type && m_Instances.contains(l_Type))
40 return *reinterpret_cast<_v::MonoPtr<t_Base>*>(&m_Instances[l_Type]);
41
42 auto l_Ptr = reinterpret_cast<t_Base*>(_u::GameObject::New_ctor("[CP_SDK.UI.FlowCoordinator<" + l_Type->get_FullName() + ">]", ArrayW<_u::Type*>({
43 l_Type
44 }))->GetComponent(l_Type));
45 _u::GameObject::DontDestroyOnLoad(l_Ptr->get_gameObject());
46
47 m_Instances[l_Type] = l_Ptr;
48 return *reinterpret_cast<_v::MonoPtr<t_Base>*>(&m_Instances[l_Type]);
49 }
50 template<class t_Base> requires(std::is_assignable_v<FlowCoordinator*&, t_Base*>)
51 static void _Destroy()
52 {
53 auto l_Type = reinterpret_cast<_u::Type*>(csTypeOf(t_Base*));
54 auto l_It = m_Instances.find(l_Type);
55 if (!l_Type || l_It == m_Instances.end())
56 return;
57
58 if (m_Instances[l_Type])
59 _u::GameObject::Destroy(m_Instances[l_Type]->get_gameObject());
60
61 m_Instances.erase(l_It);
62 }
63
64 };
65
66}
67
68CP_SDK_IL2CPP_INHERIT_HELPERS(CP_SDK::UI::FlowCoordinator);
Flow coordinator base class.
Flow coordinator interface.
User interface components, views, flow coordinator, builders and factories.
Various platform utils like Delegate/Action/Function/Event system.
Definition Delegate.hpp:8