LeviLamina
Loading...
Searching...
No Matches
EventCoordinatorPimpl.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/world/events/EventResult.h"
5
6
7namespace EventCoordinatorDetail {
8template <template <class> class TEvent, class TReturn>
9TReturn gameplayEventReturn(TEvent<TReturn> const&) {
10 if constexpr (std::is_void_v<TReturn>) {
11 return;
12 } else {
13 return TReturn{};
14 }
15}
16} // namespace EventCoordinatorDetail
17
18
19template <class T0>
21public:
22 using EventFuncPtr = std::function<EventResult(T0&)>;
23
24 std::vector<T0*> mListeners;
25 std::vector<EventFuncPtr> mEventsToProcess;
26 std::vector<T0*> mPendingRegistrations;
27 bool mHasPendingRegistrations{};
28 std::thread::id mThreadId;
29 bool mThreadIdInitialized{};
30 uint mThreadCheckIndex{};
31
32 virtual ~EventCoordinatorPimpl() = default;
33
34 MCAPI bool registerListener(gsl::not_null<T0*> listener);
35
36 MCAPI void processEvent(EventFuncPtr processor);
37
38 template <class T1, class T2>
39 MCAPI auto _processEvent(T1*, T2& event) {
40 return EventCoordinatorDetail::gameplayEventReturn(event);
41 }
42};
Definition EventCoordinatorPimpl.h:20