14#ifndef UE_CHAOS_UNTRACKED_CALLBACK_IS_ERROR
15#define UE_CHAOS_UNTRACKED_CALLBACK_IS_ERROR 0
20class FPhysicsSolverBase;
21class FMidPhaseModifierAccessor;
22class FCCDModifierAccessor;
23class FStrainModifierAccessor;
24class FCollisionContactModifier;
25class FSingleParticlePhysicsProxy;
85 OnPostInitialize_Internal();
90 OnPreSimulate_Internal();
95 OnPreIntegrate_Internal();
100 OnPostIntegrate_Internal();
105 OnMidPhaseModification_Internal(Modifier);
110 OnCCDModification_Internal(Modifier);
115 OnStrainModification_Internal(Modifier);
120 OnContactModification_Internal(Modifier);
125 OnPreSolve_Internal();
130 OnPostSolve_Internal();
135 if(CurrentOutput_Internal)
137 OnFinalizeOutputData_Internal(CurrentOutput_Internal);
138 CurrentOutput_Internal =
nullptr;
160 static TStatId StatId = FDynamicStats::CreateStatId<FStatGroup_STATGROUP_Chaos>(GetFNameForStatId());
168#if UE_CHAOS_UNTRACKED_CALLBACK_IS_ERROR
169 virtual FName GetFNameForStatId()
const = 0;
173 const static FLazyName StaticName(
"Untracked Physics Callback");
188 UE_DEPRECATED(5.5,
"This callback was never called. Instead look at either ISimCallbackObject::ProcessInputs_External or FNetworkPhysicsCallback::InjectInputsExternal.")
217 UE_DEPRECATED(5.1,
"Use HasOption(ESimCallbackOptions::RunOnFrozenGameThread) instead.")
226 : bPendingDelete(
false)
227 , bPendingDelete_External(
false)
228 , CurrentExternalInput_External(nullptr)
230 , CurrentOutput_Internal(nullptr)
231 , CurrentInput_Internal(nullptr)
265 virtual void OnPostInitialize_Internal() { }
270 virtual void OnPreSimulate_Internal()
280 virtual void OnPreIntegrate_Internal()
290 virtual void OnPostIntegrate_Internal()
300 virtual void OnMidPhaseModification_Internal(FMidPhaseModifierAccessor& Modifier)
310 virtual void OnCCDModification_Internal(FCCDModifierAccessor& Modifier)
315 virtual void OnStrainModification_Internal(FStrainModifierAccessor& Modifier)
325 virtual void OnContactModification_Internal(FCollisionContactModifier& Modifier)
336 virtual void OnPreSolve_Internal()
346 virtual void OnPostSolve_Internal()
376 virtual void OnFinalizeOutputData_Internal(FSimCallbackOutput*
CurOutput)
387 bool bPendingDelete_External;
398 UE_DEPRECATED(5.1,
"Do not change options after creation of the callback object - instead, specify them using the TOptions template parameter.")
409 return CurrentInput_Internal;
415 FReal SimTime_Internal;
416 FReal DeltaTime_Internal;
432 , bFuncHasTimeParameters(
false)
433 , ExecuteOnStep(
Step)
435 ensureMsgf(Func,
TEXT(
"Created a sim callback object with an unbound function. This command will not be executed."));
441 , bFuncHasTimeParameters(
true)
442 , ExecuteOnStep(
Step)
444 ensureMsgf(Func2,
TEXT(
"Created a sim callback object with an unbound function. This command will not be executed."));
455 const static FLazyName StaticName(
"FSimCallbackCommandObject");
461 return bIsResim ? ExecuteOnStep ==
Step : ExecuteOnStep <=
Step;
466 return !bIsResim && ExecuteOnStep >
Step;
471 return ExecuteOnStep;
489 virtual void OnPreSimulate_Internal()
override
491 if (!bFuncHasTimeParameters)
493 if (
ensureMsgf(Func,
TEXT(
"The function of this sim callback object became unbound. This should not happen. This command will not be executed.")))
500 if (
ensureMsgf(Func2,
TEXT(
"The function of this sim callback object became unbound. This should not happen. This command will not be executed.")))
512 bool bFuncHasTimeParameters;
519template <
typename TInputType = FSimCallbackNoInput,
typename TOutputType = FSimCallbackNoOutput, ESimCallbackOptions TOptions = ESimCallbackOptions::Presimulate>
526 , CurrentOutput_External(nullptr)
529 UE_DEPRECATED(5.1,
"Use default constructor instead and specify RunFrozenOnGameThread using TOptions template parameter.")
532 , CurrentOutput_External(
nullptr)
539 OutputPool.Enqueue(Concrete);
565 if(!CurrentOutput_External)
567 OutputQueue.Dequeue(CurrentOutput_External);
570 if(CurrentOutput_External && CurrentOutput_External->InternalTime <=
ResultsTime)
573 CurrentOutput_External =
nullptr;
593 if (!CurrentOutput_External)
595 OutputQueue.Dequeue(CurrentOutput_External);
599 CurrentOutput_External =
nullptr;
609 return OutputQueue.IsEmpty();
623 return static_cast<TOutputType&
>(*CurrentOutput_Internal);
630 auto NewOutput = NewDataHelper(OutputBacking, OutputPool);
635 template <
typename T>
648 virtual void FreeInputData_Internal(FSimCallbackInput*
Input)
override
652 InputPool.Enqueue(Concrete);
657 return NewDataHelper(InputBacking, InputPool);
660 virtual FSimCallbackInput* AllocateInputData_External()
override
662 return NewInputData_External();
665 void OnFinalizeOutputData_Internal(FSimCallbackOutput*
BaseOutput)
override
696inline void FSimCallbackOutputHandle::Free_External()
698 if (SimCallbackOutput)
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
return true
Definition ExternalRpcRegistry.cpp:601
const bool
Definition NetworkReplayStreaming.h:178
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition CCDModification.h:181
Definition ChaosMarshallingManager.h:314
Definition MidPhaseModification.h:157
Definition PBDRigidsSolver.h:84
Definition PhysicsSolverBase.h:313
Definition SimCallbackObject.h:427
FSimCallbackCommandObject(TUniqueFunction< void()> &&InFunc, int32 Step=INDEX_NONE)
Definition SimCallbackObject.h:429
const bool ShouldExecute(const int32 Step, const bool bIsResim) const
Definition SimCallbackObject.h:459
virtual void FreeOutputData_External(FSimCallbackOutput *Output)
Definition SimCallbackObject.h:447
const bool ShouldDelay(const int32 Step, const bool bIsResim) const
Definition SimCallbackObject.h:464
const int32 GetExecuteOnStep() const
Definition SimCallbackObject.h:469
virtual FName GetFNameForStatId() const override
Definition SimCallbackObject.h:453
FSimCallbackCommandObject(TUniqueFunction< void(FReal DeltaTime, FReal SimTime)> &&InFunc, int32 Step=INDEX_NONE)
Definition SimCallbackObject.h:438
friend struct FSimCallbackInput
Definition SimCallbackObject.h:515
Definition StrainModification.h:180
Definition SimCallbackObject.h:68
virtual FName GetFNameForStatId() const
Definition SimCallbackObject.h:171
bool RunOnFrozenGameThread() const
Definition SimCallbackObject.h:218
virtual void FreeOutputData_External(FSimCallbackOutput *Output)=0
FReal GetSimTime_Internal() const
Definition SimCallbackObject.h:76
virtual void FreeInputData_Internal(FSimCallbackInput *Input)=0
ISimCallbackObject(const ESimCallbackOptions InOptions=ESimCallbackOptions::Presimulate)
Definition SimCallbackObject.h:225
void MidPhaseModification_Internal(FMidPhaseModifierAccessor &Modifier)
Definition SimCallbackObject.h:103
void StrainModification_Internal(FStrainModifierAccessor &Modifier)
Definition SimCallbackObject.h:113
const FSimCallbackInput * GetCurrentInput_Internal() const
Definition SimCallbackObject.h:407
void FinalizeOutputData_Internal()
Definition SimCallbackObject.h:133
CHAOS_API FSimCallbackInput * GetProducerInputData_External()
Definition ChaosMarshallingManager.cpp:354
void CCDModification_Internal(FCCDModifierAccessor &Modifier)
Definition SimCallbackObject.h:108
void PostIntegrate_Internal()
Definition SimCallbackObject.h:98
void SetSimAndDeltaTime_Internal(const FReal InSimTime, const FReal InDeltaTime)
Definition SimCallbackObject.h:247
FPhysicsSolverBase * GetSolver()
Definition SimCallbackObject.h:178
const FPhysicsSolverBase * GetSolver() const
Definition SimCallbackObject.h:183
virtual void ApplyCorrections_Internal(int32 PhysicsStep, FSimCallbackInput *Input)
Definition SimCallbackObject.h:204
virtual void ProcessInputs_Internal(int32 PhysicsStep)
Definition SimCallbackObject.h:193
FReal GetDeltaTime_Internal() const
Definition SimCallbackObject.h:79
FSimCallbackOutput * CurrentOutput_Internal
Definition SimCallbackObject.h:405
void SetCurrentInput_Internal(FSimCallbackInput *NewInput)
Definition SimCallbackObject.h:242
bool HasOption(const ESimCallbackOptions Option) const
Definition SimCallbackObject.h:212
ISimCallbackObject(const ISimCallbackObject &)=delete
void PreIntegrate_Internal()
Definition SimCallbackObject.h:93
void PostSolve_Internal()
Definition SimCallbackObject.h:128
void PostInitialize_Internal()
Definition SimCallbackObject.h:83
void ContactModification_Internal(FCollisionContactModifier &Modifier)
Definition SimCallbackObject.h:118
virtual void FirstPreResimStep_Internal(int32 PhysicsStep)
Definition SimCallbackObject.h:209
virtual bool IsFAsyncObjectManagerCallback() const
Definition SimCallbackObject.h:81
void PreSimulate_Internal()
Definition SimCallbackObject.h:88
virtual ~ISimCallbackObject()=default
virtual void ProcessInputs_External(int32 PhysicsStep)
Definition SimCallbackObject.h:197
virtual int32 TriggerRewindIfNeeded_Internal(int32 LastCompletedStep)
Definition SimCallbackObject.h:199
void PreSolve_Internal()
Definition SimCallbackObject.h:123
Definition SimCallbackObject.h:521
bool IsOutputQueueEmpty_External() const
Definition SimCallbackObject.h:607
TSimCallbackObject()
Definition SimCallbackObject.h:524
TOutputType & GetProducerOutputData_Internal()
Definition SimCallbackObject.h:616
virtual void FreeOutputData_External(FSimCallbackOutput *Output) override
Definition SimCallbackObject.h:535
TInputType * GetProducerInputData_External()
Definition SimCallbackObject.h:545
TSimCallbackOutputHandle< TOutputType > PopFutureOutputData_External()
Definition SimCallbackObject.h:591
const TInputType * GetConsumerInput_Internal() const
Definition SimCallbackObject.h:553
TSimCallbackOutputHandle< TOutputType > PopOutputData_External()
Definition SimCallbackObject.h:562
Definition SimCallbackInput.h:141
Definition NameTypes.h:1680
Definition NameTypes.h:617
Definition TransactionallySafeSpscQueue.h:30
TOptional< ElementType > Dequeue()
Definition TransactionallySafeSpscQueue.h:84
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
FReal GetSolverPhysicsResultsTime(const FPhysicsSolverBase *Solver)
Definition Utilities.cpp:18
Definition SkeletalMeshComponent.h:307
ESimCallbackOptions
Definition SimCallbackObject.h:33
@ PhysicsObjectUnregister
FRealDouble FReal
Definition Real.h:22
const FPhysicsObject * FConstPhysicsObjectHandle
Definition PhysicsObject.h:19
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
@ false
Definition radaudio_common.h:23
Definition ChaosMarshallingManager.h:286
Definition SimCallbackInput.h:18
Definition LightweightStats.h:416