47 template<
typename PayloadType>
58 template<
typename PayloadType,
typename HandlerType>
71 check(HandlerFunction);
76 virtual void HandleEvent(
const void* EventData)
const override
78 (Handler->*HandlerFunction)(*(
const PayloadType*)EventData);
83 if (!InterestedProxyOwnersFunction)
88 Output = (Handler->*InterestedProxyOwnersFunction)();
151 template<
typename PayloadType>
169 InjectedFunction =
Other.InjectedFunction;
171 bDispatchInProgress =
Other.bDispatchInProgress;
184 Pair.Value =
nullptr;
195 if(bDispatchInProgress)
198 DeferredHandlers.AddUnique(Handler);
205 HandlerMap.Add(Handler->
GetHandler(), Handler);
213 ProxyOwnerToHandlerMap.Add(
ProxyOwner, Handler);
220 HandlersNotInProxyOwnerMap.Add(Handler->
GetHandler(), Handler);
232 if(bDispatchInProgress)
257 HandlersNotInProxyOwnerMap.Remove(
InHandler);
271 InjectedFunction(Solver, *EventBuffer->AccessProducerBuffer(),
bResetData);
277 InFunction(*EventBuffer->AccessProducerBuffer());
282 InFunction(*EventBuffer->AccessProducerBuffer());
290 EventBuffer->FlipProducer();
298 EventBuffer->GetConsumerBufferMutable()->Reset();
308 const PayloadType*
Buffer = EventBuffer.Get()->GetConsumerBuffer();
320 UnregisterDeferedHandler();
332 if(
Map &&
Map->Num() + HandlersNotInProxyOwnerMap.Num() < HandlerMap.Num())
334 if(!ProxyOwnerToHandlerMap.IsEmpty())
342 for(TMultiMap<UObject*, FEventHandlerPtr>::TConstKeyIterator It = ProxyOwnerToHandlerMap.CreateConstKeyIterator(
Owner); It; ++It)
350 Handler->HandleEvent(
Buffer);
370 RegisterDeferedHandler();
375 void UnregisterDeferedHandler()
383 check(DeferredUnregisterHandlers.
Num() == 0);
392 void RegisterDeferedHandler()
400 check(DeferredHandlers.Num() == 0);
439 bool bDispatchInProgress =
false;
478 template<
typename PayloadType>
489 template<
typename PayloadType>
509 template<
typename PayloadType,
typename HandlerType>
514 checkf(
EventID < EventContainers.Num(),
TEXT(
"Registering event Handler for an event ID that does not exist"));
545 template<
typename PayloadType>
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ SLT_Write
Definition ScopeRWLock.h:139
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
UE_REWRITE T StaticCast(ArgType &&Arg)
Definition UnrealTemplate.h:638
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition EventManager.h:114
virtual void DispatchConsumerData()=0
virtual void InjectProducerData(const FPBDRigidsSolver *Solver, bool bResetData)=0
virtual ~FEventContainerBase()
Definition EventManager.h:116
virtual void ResetConsumerBuffer()=0
virtual void RegisterHandler(const FEventHandlerPtr &Handler)=0
virtual void FlipBufferIfRequired()=0
virtual void UnregisterHandler(const void *Handler)=0
Definition EventManager.h:448
CHAOS_API void UnregisterHandler(const EEventType &EventType, const void *InHandler)
Definition EventManager.cpp:38
FEventManager(const Chaos::EMultiBufferMode &BufferModeIn)
Definition EventManager.h:453
CHAOS_API void DispatchEvents()
Definition EventManager.cpp:96
static CHAOS_API int32 DecodeCollisionIndex(int32 EncodedCollisionIdx, bool &bSwapOrder)
Definition EventManager.cpp:148
CHAOS_API void UnregisterEvent(const EEventType &EventType)
Definition EventManager.cpp:26
void SetBufferMode(const Chaos::EMultiBufferMode &BufferModeIn)
Definition EventManager.h:470
~FEventManager()
Definition EventManager.h:457
CHAOS_API void FillProducerData(const Chaos::FPBDRigidsSolver *Solver, bool bResetData=true)
Definition EventManager.cpp:47
void RegisterEvent(const EEventType &EventType, TFunction< void(const Chaos::FPBDRigidsSolver *Solver, PayloadType &EventData, bool bResetData)> InFunction)
Definition EventManager.h:479
void AddEvent(const EEventType &EventType, TFunction< void(PayloadType &EventData)> InFunction)
Definition EventManager.h:546
CHAOS_API void Reset()
Definition EventManager.cpp:14
void RegisterHandler(const EEventType &EventType, HandlerType *Handler, typename TRawEventHandler< PayloadType, HandlerType >::FHandlerFunction HandlerFunction, typename TRawEventHandler< PayloadType, HandlerType >::FInterestedProxyOwnerFunction InterestedProxyOwnerFunction=nullptr)
Definition EventManager.h:510
void ClearEvents(const EEventType &EventType, TFunction< void(PayloadType &EventData)> InFunction)
Definition EventManager.h:490
static CHAOS_API int32 EncodeCollisionIndex(int32 ActualCollisionIndex, bool bSwapOrder)
Definition EventManager.cpp:143
CHAOS_API void FlipBuffersIfRequired()
Definition EventManager.cpp:68
Definition MultiBufferResource.h:309
Definition PBDRigidsSolver.h:84
Definition EventManager.h:46
virtual ~IEventHandler()
Definition EventManager.h:51
virtual void HandleEvent(const void *EventData) const =0
virtual void * GetHandler() const =0
virtual bool GetInterestedProxyOwners(TArray< UObject * > &Output) const =0
Definition EventManager.h:153
virtual void RegisterHandler(const FEventHandlerPtr &Handler)
Definition EventManager.h:191
virtual void DispatchConsumerData()
Definition EventManager.h:304
virtual void InjectProducerData(const FPBDRigidsSolver *Solver, bool bResetData)
Definition EventManager.h:269
virtual void AddEvent(TFunction< void(PayloadType &EventDataInOut)> InFunction)
Definition EventManager.h:280
TEventContainer(TEventContainer< PayloadType > &Other)
Definition EventManager.h:167
~TEventContainer()
Definition EventManager.h:177
virtual void FlipBufferIfRequired()
Definition EventManager.h:288
virtual void ResetConsumerBuffer()
Definition EventManager.h:296
virtual void UnregisterHandler(const void *InHandler)
Definition EventManager.h:228
TEventContainer(const Chaos::EMultiBufferMode &BufferMode, TFunction< void(const FPBDRigidsSolver *Solver, PayloadType &EventDataInOut, bool bResetData)> InFunction)
Definition EventManager.h:158
virtual void DestroyStaleEvents(TFunction< void(PayloadType &EventDataInOut)> InFunction)
Definition EventManager.h:275
Definition EventManager.h:60
virtual void HandleEvent(const void *EventData) const override
Definition EventManager.h:76
virtual bool GetInterestedProxyOwners(TArray< UObject * > &Output) const override
Definition EventManager.h:81
void * GetHandler() const override
Definition EventManager.h:92
TRawEventHandler(HandlerType *InHandler, FHandlerFunction InFunction, FInterestedProxyOwnerFunction InFunctionProxyOwners=nullptr)
Definition EventManager.h:65
void(HandlerType::* FHandlerFunction)(const PayloadType &)
Definition EventManager.h:62
TArray< UObject * >(HandlerType::* FInterestedProxyOwnerFunction)()
Definition EventManager.h:63
Definition PhysicsProxyBase.h:97
UObject * GetOwner() const
Definition PhysicsProxyBase.h:107
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT SizeType AddUnique(ElementType &&Item)
Definition Array.h:2993
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition ScopeRWLock.h:154
Definition ScopeRWLock.h:21
Definition ScopeRWLock.h:60
bool bEventManagerDispatchEmptyEvents
Definition EventManager.cpp:10
Definition SkeletalMeshComponent.h:307
EMultiBufferMode
Definition MultiBufferResource.h:9
EEventType
Definition EventManager.h:30
bool IsEventDataEmpty(const PayloadType *Buffer)
Definition EventsData.h:235
IEventHandler * FEventHandlerPtr
Definition EventManager.h:108
int32 FEventID
Definition EventManager.h:39
const TMap< IPhysicsProxyBase *, TArray< int32 > > * GetProxyToIndexMap(const PayloadType *Buffer)
Definition EventsData.h:273
Definition OverriddenPropertySet.cpp:45
Definition UnrealTemplate.h:341