2022-11-22 20:17:33 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2022-11-01 15:11:19 -04:00
# include "StateTreeEvents.h"
# include "StateTreeTypes.h"
# include "VisualLogger/VisualLogger.h"
2022-11-22 20:17:33 -05:00
# include UE_INLINE_GENERATED_CPP_BY_NAME(StateTreeEvents)
2024-03-11 04:54:44 -04:00
//----------------------------------------------------------------//
// FStateTreeSharedEvent
//----------------------------------------------------------------//
void FStateTreeSharedEvent : : AddStructReferencedObjects ( FReferenceCollector & Collector )
{
2024-07-31 05:52:37 -04:00
if ( IsValid ( ) )
{
Collector . AddPropertyReferencesWithStructARO ( FStateTreeEvent : : StaticStruct ( ) , Event . Get ( ) ) ;
}
2024-03-11 04:54:44 -04:00
}
//----------------------------------------------------------------//
// FStateTreeEventQueue
//----------------------------------------------------------------//
2022-11-01 15:11:19 -04:00
void FStateTreeEventQueue : : SendEvent ( const UObject * Owner , const FGameplayTag & Tag , const FConstStructView Payload , const FName Origin )
{
2024-06-25 04:59:22 -04:00
if ( ! Tag . IsValid ( ) & & ! Payload . IsValid ( ) )
{
UE_VLOG_UELOG ( Owner , LogStateTree , Error , TEXT ( " %s: An event with an invalid tag and payload has been sent to '%s'. This is not allowed. " ) , ANSI_TO_TCHAR ( __FUNCTION__ ) , * GetNameSafe ( Owner ) ) ;
return ;
}
2024-03-11 04:54:44 -04:00
if ( SharedEvents . Num ( ) > = MaxActiveEvents )
2022-11-01 15:11:19 -04:00
{
UE_VLOG_UELOG ( Owner , LogStateTree , Error , TEXT ( " %s: Too many events send on '%s'. Dropping event %s " ) , ANSI_TO_TCHAR ( __FUNCTION__ ) , * GetNameSafe ( Owner ) , * Tag . ToString ( ) ) ;
return ;
}
2024-03-11 04:54:44 -04:00
SharedEvents . Emplace ( Tag , Payload , Origin ) ;
2022-11-22 20:17:33 -05:00
}
2024-04-12 06:04:01 -04:00
void FStateTreeEventQueue : : ConsumeEvent ( const FStateTreeSharedEvent & Event )
{
SharedEvents . RemoveAll ( [ & EventToRemove = Event ] ( const FStateTreeSharedEvent & Event )
{
return Event = = EventToRemove ;
} ) ;
}