11#ifndef VALIDATE_REWIND_DATA
12#define VALIDATE_REWIND_DATA 0
15#ifndef DEBUG_REWIND_DATA
16#define DEBUG_REWIND_DATA 0
19#ifndef DEBUG_NETWORK_PHYSICS
20#define DEBUG_NETWORK_PHYSICS 0
112 UE_DEPRECATED(5.7,
"Deprecated, use the ReceiveNewData call with parameter InjectAtFrameIfEmpty, pass in nullptr to opt out of implementing a function.")
119 UE_DEPRECATED(5.6,
"Deprecated, use the NetSerialize call with parameter that takes a function DataSetupFunction, pass in nullptr to opt out of implementing a function.")
135 UE_DEPRECATED(5.6,
"Deprecated, RewindStates is no longer viable. Any custom states can be applied during IRewindCallback::ProcessInputs_Internal during resimulation. Example FNetworkPhysicsCallback")
139 UE_DEPRECATED(5.6,
"Deprecated, ApplyInputs is no longer viable. Any custom inputs can be applied during IRewindCallback::ProcessInputs_Internal during resimulation. Example FNetworkPhysicsCallback")
162template<
typename DataType>
237#if DEBUG_NETWORK_PHYSICS
261#if DEBUG_NETWORK_PHYSICS
277#if DEBUG_NETWORK_PHYSICS
284#if DEBUG_NETWORK_PHYSICS
295 const int32 ToFrame =
static_cast<DataType*
>(
ToData)->LocalFrame;
296 for (; FromFrame < ToFrame; FromFrame++)
299 if (FromFrame ==
DataHistory[FromIndex].LocalFrame)
302 static_cast<DataType*
>(
ToData)->bDataAltered =
true;
516 return static_cast<uint32>(Idx);
589template <
typename THandle,
typename T,
bool bNoEntryIsHead>
599template <
typename THandle,
typename T>
607 return HeadVal == T::ZeroValue();
617template <
typename TData,
typename TObj>
625 Data =
Joint.GetSettings();
628template <
typename T, EChaosProperty PropName,
bool bNoEntryIsHead = true>
641 , NumValid(
Other.NumValid)
642 , Capacity(
Other.Capacity)
654 ensure(Buffer.Num() == 0);
673 const int32 Idx = FindIdx(FrameAndPhase);
674 return Idx !=
INDEX_NONE ? &GetPool(Manager).GetElement(Buffer[Idx].Ref) :
nullptr;
682 const int32 Prev = Next == 0 ? Buffer.Num() - 1 : Next - 1;
709 return NumValid == 0;
731 ValidCount = NumValid;
737 NumValid = ValidCount;
746 template <
typename THandle>
749 if (
const T*
Val =
Read(FrameAndPhase, Pool))
763 int32 FrameIndex = FindIdx(FrameAndPhase);
766 Result = &GetPool(Manager).GetElement(Buffer[FrameIndex].Ref);
771 if (Next >= Buffer.Num())
773 GetPool(Manager).AddElement(ElementRef);
774 Buffer.Add({ ElementRef, FrameAndPhase });
778 ElementRef = Buffer[Next].Ref;
780 Result = &GetPool(Manager).GetElement(ElementRef);
794 Buffer[NextFrame].FrameAndPhase = FrameAndPhase;
795 Buffer[NextFrame].Ref = ElementRef;
802 if (
Count == NumValid - 1)
805 Buffer[
PrevFrame].FrameAndPhase = FrameAndPhase;
812 if (Next == Capacity) { Next = 0; }
814 NumValid = FMath::Min(++NumValid, Capacity);
828 if (Cur < 0) { Cur = Buffer.Num() - 1; }
830 const FPropertyInterval& Interval = Buffer[Cur];
832 if (Interval.FrameAndPhase < FrameAndPhase)
857 const TPropertyPool<T>& GetPool(
const FDirtyPropertiesPool& Manager)
const {
return Manager.GetPool<T,
PropName>(); }
863 template <
bool bEnsureMonotonic>
864 T* WriteAccessImp(
const FFrameAndPhase FrameAndPhase, FDirtyPropertiesPool& Manager)
868 const int32 Prev = Next == 0 ? Buffer.Num() - 1 : Next - 1;
891 if (Next < Buffer.Num())
894 FPropertyInterval& Interval = Buffer[Next];
895 Interval.FrameAndPhase = FrameAndPhase;
896 Result = &GetPool(Manager).GetElement(Interval.Ref);
903 Buffer.Add({
NewIdx, FrameAndPhase });
907 if (Next == Capacity) { Next = 0; }
909 NumValid = FMath::Min(++NumValid, Capacity);
916#if VALIDATE_REWIND_DATA
922 if (
Val < 0) {
Val = Buffer.Num() - 1; }
970template <
typename T, EShapeProperty PropName>
1002 template <
typename TParticle>
1006 return State && State->CollisionData.IsSet() ? State->CollisionData.Read().GetQueryData() : Particle.ShapesArray()[ShapeIdx]->GetQueryData();
1025 const int32 ShapeIdx;
1045template <
typename T>
1048 return Val.ToString();
1051template <
typename T>
1054 return FString::Printf(
TEXT(
"(%s, %s)"), *
Val[0].ToString(), *
Val[1].ToString());
1066 return FString::Printf(
TEXT(
"%f"),
Val);
1071 return FString::Printf(
TEXT(
"%f"),
Val);
1076 return FString::Printf(
TEXT(
"%d"),
Val);
1081 return FString::Printf(
TEXT(
"%d"),
Val);
1086 return FString::Printf(
TEXT(
"%d"),
Val);
1091 return FString::Printf(
TEXT(
"%d"),
Val);
1096 return FString::Printf(
TEXT(
"%d"),
Val);
1101 return FString::Printf(
TEXT(
"%d"),
Val);
1105template <
typename TParticle>
1120#define REWIND_CHAOS_PARTICLE_PROPERTY(PROP, NAME)\
1121 const auto Data = State ? State->PROP.Read(FrameAndPhase, Pool) : nullptr;\
1122 return Data ? Data->NAME() : Head.NAME();\
1124#define REWIND_CHAOS_ZERO_PARTICLE_PROPERTY(PROP, NAME)\
1125 const auto Data = State ? State->PROP.Read(FrameAndPhase, Pool) : nullptr;\
1126 return Data ? Data->NAME() : ZeroVector;\
1128#define REWIND_PARTICLE_STATIC_PROPERTY(PROP, NAME)\
1129 decltype(auto) NAME() const\
1131 auto& Head = Particle;\
1132 REWIND_CHAOS_PARTICLE_PROPERTY(PROP, NAME);\
1135#define REWIND_PARTICLE_KINEMATIC_PROPERTY(PROP, NAME)\
1136 decltype(auto) NAME() const\
1138 auto& Head = *Particle.CastToKinematicParticle();\
1139 REWIND_CHAOS_PARTICLE_PROPERTY(PROP, NAME);\
1142#define REWIND_PARTICLE_RIGID_PROPERTY(PROP, NAME)\
1143 decltype(auto) NAME() const\
1145 auto& Head = *Particle.CastToRigidParticle();\
1146 REWIND_CHAOS_PARTICLE_PROPERTY(PROP, NAME);\
1149#define REWIND_PARTICLE_ZERO_PROPERTY(PROP, NAME)\
1150 decltype(auto) NAME() const\
1152 auto& Head = *Particle.CastToRigidParticle();\
1153 REWIND_CHAOS_ZERO_PARTICLE_PROPERTY(PROP, NAME);\
1156#define REWIND_JOINT_PROPERTY(PROP, FUNC_NAME, NAME)\
1157 decltype(auto) Get##FUNC_NAME() const\
1159 const auto Data = State ? State->PROP.Read(FrameAndPhase, Pool) : nullptr;\
1160 return Data ? Data->NAME : Head.Get##PROP().NAME;\
1168 UE_DEPRECATED(5.6,
"Use the constructor that takes a @param bCacheOnePhase")
1241 Velocities.ClearEntryAndFuture(FrameAndPhase);
1242 Dynamics.ClearEntryAndFuture(FrameAndPhase);
1244 MassProps.ClearEntryAndFuture(FrameAndPhase);
1275 template <
bool bSkipDynamics = false>
1278 template <
typename TParticle>
1287 template<
typename TParticle>
1288 UE_DEPRECATED(5.6,
"Deprecated, use FRewindData::CachePreResimState instead. Not all moving particles are marked as dirty, for example GeometryCollection children of a ClusterUnion.")
1312 UE_DEPRECATED(5.6,
"Deprecated, use FRewindData::DirtyParticlePreResimState")
1323 , FrameAndPhase{0,0}
1387#undef REWIND_PARTICLE_TO_STR
1388#define REWIND_PARTICLE_TO_STR(PropName) Out += FString::Printf(TEXT(#PropName":%s\n"), *ToStringHelper(PropName()));
1390 FString Out = FString::Printf(
TEXT(
"ParticleID:[Global: %d Local: %d]\n"), Particle.ParticleID().GlobalID, Particle.ParticleID().LocalID);
1398 if(Particle.CastToKinematicParticle())
1404 if(Particle.CastToRigidParticle())
1445 UE_DEPRECATED(5.6,
"Use the constructor that takes a @param bCacheOnePhase")
1447 : JointSettings(ComputeCircularSize(NumFrames))
1448 , JointProxies(ComputeCircularSize(NumFrames))
1464 JointSettings.Release(Manager);
1465 JointProxies.Release(Manager);
1470 JointSettings.Reset();
1471 JointProxies.Reset();
1476 JointSettings.ClearEntryAndFuture(FrameAndPhase);
1477 JointProxies.ClearEntryAndFuture(FrameAndPhase);
1482 return JointSettings.IsClean(FrameAndPhase) && JointProxies.IsClean(FrameAndPhase);
1485 template <
bool bSkipDynamics>
1511#define CHAOS_INNER_JOINT_PROPERTY(OuterProp, FuncName, Inner, InnerType) REWIND_JOINT_PROPERTY(OuterProp, FuncName, Inner);
1518 FString Out = FString::Printf(
TEXT(
"Joint: Particle0 ID:[Global: %d Local: %d] Particle1 ID:[Global: %d Local: %d]\n"), Particles[0]->ParticleID().GlobalID, Particles[0]->ParticleID().LocalID, Particles[1]->ParticleID().GlobalID, Particles[1]->ParticleID().LocalID);
1520#define CHAOS_INNER_JOINT_PROPERTY(OuterProp, FuncName, Inner, InnerType) Out += FString::Printf(TEXT(#FuncName":%s\n"), *ToStringHelper(Get##FuncName()));
1522#undef CHAOS_INNER_JOINT_PROPERTY
1534template <
typename T>
1538template <
typename T>
1541template <
typename TVal>
1546 ((
TVal*)0)->GetObjectPtr()
1559 KeyToIdx.Add(Key, Idx);
1560 return DenseVals[Idx];
1566 const int32 Idx = KeyToIdx.FindChecked(Key);
1567 return DenseVals[Idx];
1572 const int32 Idx = KeyToIdx.FindChecked(Key);
1573 return DenseVals[Idx];
1578 if (
const int32* Idx = KeyToIdx.Find(Key))
1580 return &DenseVals[*Idx];
1588 if (
const int32* Idx = KeyToIdx.Find(Key))
1590 return &DenseVals[*Idx];
1598 if (
const int32* Idx = KeyToIdx.Find(Key))
1603 if(*Idx < DenseVals.Num())
1609 KeyToIdx.Remove(Key);
1631 auto begin() {
return DenseVals.begin(); }
1632 auto end() {
return DenseVals.end(); }
1634 auto cbegin()
const {
return DenseVals.begin(); }
1635 auto cend()
const {
return DenseVals.end(); }
1647class FPBDRigidsSolver;
1661 LatestTargetFrame = 0;
1664 RegisterEvolutionCallbacks();
1672 LatestTargetFrame = 0;
1675 RegisterEvolutionCallbacks();
1679 void RegisterEvolutionCallbacks();
1690 return Managers[
Frame].DeltaTime;
1731 FDirtyParticleInfo&
Info = FindOrAddDirtyObj(
Handle);
1738 FDirtyParticleInfo&
Info = FindOrAddDirtyObj(
Handle);
1750 return Managers[CurFrame].ExternalResimCache.Get();
1756 bool GetUseCollisionResimCache()
const;
1759 template <
typename CreateCache>
1763 Managers[CurFrame].DeltaTime = DeltaTime;
1764 Managers[CurFrame].FrameCreatedFor = CurFrame;
1767 if (GetUseCollisionResimCache())
1801 return CurFrame < LatestFrame;
1806 return (CurFrame + 1) == LatestFrame;
1829 InputHistories.AddUnique(InputHistory.
ToWeakPtr());
1835 InputHistories.Remove(InputHistory.
ToWeakPtr());
1841 AddInputHistory(InputHistory);
1842 if (Particle !=
nullptr)
1844 InputParticleHistories.Add(Particle, InputHistory.
ToWeakPtr());
1851 RemoveInputHistory(InputHistory);
1852 if (Particle !=
nullptr)
1854 InputParticleHistories.Remove(Particle);
1861 StateHistories.AddUnique(StateHistory.
ToWeakPtr());
1867 StateHistories.Remove(StateHistory.
ToWeakPtr());
1873 AddStateHistory(StateHistory);
1874 if (Particle !=
nullptr)
1876 StateParticleHistories.Add(Particle, StateHistory.
ToWeakPtr());
1883 RemoveStateHistory(StateHistory);
1884 if (Particle !=
nullptr)
1886 StateParticleHistories.Remove(Particle);
1891 UE_DEPRECATED(5.6,
"Deprecated, ApplyInputs is no longer viable. Any custom states can be applied during IRewindCallback::ProcessInputs_Internal during resimulation. Example FNetworkPhysicsCallback")
1962 struct FFrameManagerInfo
1973 template <
typename THistoryType,
typename TObj>
1974 struct TDirtyObjectInfo
1982 int32 LastDirtyFrame;
1984 bool bResimAsFollower =
true;
1985 bool bNeedsResim =
false;
1991 , LastDirtyFrame(CurFrame)
1995 TDirtyObjectInfo(TDirtyObjectInfo&&
Other)
1997 , ObjPtr(
Other.ObjPtr)
1998 , PropertiesPool(
Other.PropertiesPool)
1999 , LastDirtyFrame(
Other.LastDirtyFrame)
2000 , InitializedOnStep(
Other.InitializedOnStep)
2001 , bResimAsFollower(
Other.bResimAsFollower)
2002 , bNeedsResim(
Other.bNeedsResim)
2004 Other.PropertiesPool =
nullptr;
2011 History.Release(*PropertiesPool);
2015 TDirtyObjectInfo(
const TDirtyObjectInfo&
Other) =
delete;
2017 TObj* GetObjectPtr()
const {
return ObjPtr; }
2019 UE_DEPRECATED(5.7,
"Deprecated, Use GetHistory() and MarkDirty() individually instead")
2022 LastDirtyFrame =
Frame;
2026 void ClearPhaseAndFuture(
const FFrameAndPhase FrameAndPhase)
2028 History.ClearEntryAndFuture(FrameAndPhase);
2043 LastDirtyFrame =
Frame;
2050 struct FDirtyParticleErrorInfo
2054 FVec3 ErrorX = { 0,0,0 };
2058 FDirtyParticleErrorInfo(FGeometryParticleHandle&
InHandle) : HandlePtr(&
InHandle)
2068 FVec3 GetErrorX()
const {
return ErrorX; }
2069 FQuat GetErrorR()
const {
return ErrorR; }
2072 template <
typename TDirtyObjs,
typename TObj>
2078 FDirtyParticleInfo* FindDirtyObj(
const FGeometryParticleHandle&
Handle)
2080 return FindDirtyObjImp(DirtyParticles,
Handle);
2083 FDirtyJointInfo* FindDirtyObj(
const FPBDJointConstraintHandle&
Handle)
2085 return FindDirtyObjImp(DirtyJoints,
Handle);
2088 template <
typename TDirtyObjs,
typename TObj>
2112 template <
typename TObjState,
typename TDirtyObjs,
typename TObj>
2130 void StepNonResimParticles(
const int32 Frame);
2132 template <
typename TDirtyInfo>
2133 static void DesyncObject(
TDirtyInfo&
Info,
const FFrameAndPhase FrameAndPhase)
2135 Info.ClearPhaseAndFuture(FrameAndPhase);
2136 Info.GetObjectPtr()->SetSyncState(ESyncState::HardDesync);
2140 FDirtyPropertiesPool PropertiesPool;
2142 TDirtyObjects<FDirtyParticleInfo> DirtyParticles;
2143 TDirtyObjects<FDirtyJointInfo> DirtyJoints;
2144 TDirtyObjects<FDirtyParticleErrorInfo> DirtyParticlePreResimState;
2145 TDirtyObjects<FDirtyParticleErrorInfo> DirtyParticleErrors;
2157 int32 DataIdxOffset;
2159 bool bRewindDataOptimization;
2161 int32 LatestTargetFrame;
2170 template <
typename TObj>
2171 bool IsResimAndInSync(
const TObj&
Handle)
const {
return IsResim() &&
Handle.SyncState() == ESyncState::InSync; }
2173 template <
bool bSkipDynamics,
typename TDirtyInfo>
2174 void DesyncIfNecessary(
TDirtyInfo&
Info,
const FFrameAndPhase FrameAndPhase);
2176 void CachePreResimState(FGeometryParticleHandle&
Handle);
2178 template<
typename TObj>
2179 void AccumulateErrorIfNecessary(
TObj&
Handle,
const FFrameAndPhase FrameAndPhase) { }
2184 double ResimTime = 0.0;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
EAllowShrinking
Definition AllowShrinking.h:10
#define UE_ALLOWSHRINKING_BOOL_DEPRECATED(FunctionName)
Definition AllowShrinking.h:31
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define PRAGMA_DISABLE_INTERNAL_WARNINGS
Definition CoreMiscDefines.h:346
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define PRAGMA_ENABLE_INTERNAL_WARNINGS
Definition CoreMiscDefines.h:347
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define QUICK_SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:652
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const Chaos::FPhysicsSolver * GetSolver(const AGeometryCollectionActor &GeomCollectionActor)
Definition GeometryCollectionActor.cpp:49
@ Rigid
Definition HairStrandsInterface.h:200
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define REWIND_PARTICLE_RIGID_PROPERTY(PROP, NAME)
Definition RewindData.h:1142
#define REWIND_PARTICLE_ZERO_PROPERTY(PROP, NAME)
Definition RewindData.h:1149
#define REWIND_PARTICLE_TO_STR(PropName)
#define REWIND_PARTICLE_STATIC_PROPERTY(PROP, NAME)
Definition RewindData.h:1128
#define REWIND_PARTICLE_KINEMATIC_PROPERTY(PROP, NAME)
Definition RewindData.h:1135
float Val(const FString &Value)
Definition UnrealMath.cpp:3163
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ParticleDirtyFlags.h:1129
Definition ParticleDirtyFlags.h:1039
Definition ParticleDirtyFlags.h:1350
Definition RewindData.h:1317
void SetState(const FGeometryParticleStateBase *InState)
Definition RewindData.h:1380
FGeometryParticleState(const FGeometryParticleStateBase *InState, const FGeometryParticleHandle &InParticle, const FDirtyPropertiesPool &InPool, const FFrameAndPhase InFrameAndPhase)
Definition RewindData.h:1327
FString ToString() const
Definition RewindData.h:1385
const FGeometryParticleHandle & GetHandle() const
Definition RewindData.h:1375
FGeometryParticleState(const FGeometryParticleHandle &InParticle, const FDirtyPropertiesPool &InPool)
Definition RewindData.h:1320
Definition RewindData.h:1493
FJointState(const FJointStateBase *InState, const FPBDJointConstraintHandle &InJoint, const FDirtyPropertiesPool &InPool, const FFrameAndPhase InFrameAndPhase)
Definition RewindData.h:1501
FJointState(const FPBDJointConstraintHandle &InJoint, const FDirtyPropertiesPool &InPool)
Definition RewindData.h:1495
FString ToString() const
Definition RewindData.h:1515
Definition KinematicTargets.h:34
Definition PBDJointConstraints.h:28
Definition PBDJointConstraintTypes.h:114
Definition PBDRigidsSolver.h:84
Definition ParticleDirtyFlags.h:368
Definition ParticleDirtyFlags.h:177
Definition ParticleDirtyFlags.h:60
void SetR(const FRotation3 &InR)
Definition ParticleDirtyFlags.h:103
void SetX(const FVec3 &InX)
Definition ParticleDirtyFlags.h:99
Definition ParticleDirtyFlags.h:118
Definition RewindData.h:1012
const FCollisionFilterData & GetQueryData() const
Definition RewindData.h:1021
FPerShapeDataState(const FPerShapeDataStateBase *InState, const FGeometryParticleHandle &InParticle, const int32 InShapeIdx)
Definition RewindData.h:1014
Definition RewindData.h:1650
void AdvanceFrame(FReal DeltaTime, const CreateCache &CreateCacheFunc)
Definition RewindData.h:1760
int32 GetLatestFrame() const
Definition RewindData.h:1684
void RestoreHistoryState(FGeometryParticleHandle &Handle, const int32 &PositionValidCount, const int32 &VelocityValidCount, const int32 &PositionNextIterator, const int32 &VelocityNextIterator)
Definition RewindData.h:1736
void Init(FPBDRigidsSolver *InSolver, int32 NumFrames, bool InRewindDataOptimization, int32 InCurrentFrame)
Definition RewindData.h:1655
void RemoveObject(const FGeometryParticleHandle *Particle, const EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition RewindData.h:1693
int32 Capacity() const
Definition RewindData.h:1682
void SetResimFrame(int32 Frame)
Definition RewindData.h:1909
int32 GetEarliestFrame_Internal() const
Definition RewindData.h:1713
void AddInputHistory(const TSharedPtr< FBaseRewindHistory > &InputHistory)
Definition RewindData.h:1827
void RemoveInputHistory(const TSharedPtr< FBaseRewindHistory > &InputHistory, Chaos::FGeometryParticleHandle *Particle)
Definition RewindData.h:1849
const int32 GetResimFrame() const
Definition RewindData.h:1908
void RemoveStateHistory(const TSharedPtr< FBaseRewindHistory > &StateHistory, Chaos::FGeometryParticleHandle *Particle)
Definition RewindData.h:1881
const int32 GetBlockedResimFrame() const
Definition RewindData.h:1922
void AddStateHistory(const TSharedPtr< FBaseRewindHistory > &StateHistory)
Definition RewindData.h:1859
void AddStateHistory(const TSharedPtr< FBaseRewindHistory > &StateHistory, Chaos::FGeometryParticleHandle *Particle)
Definition RewindData.h:1871
void SetRewindDataOptimization(bool InRewindDataOptimization)
Definition RewindData.h:1926
void RemoveStateHistory(const TSharedPtr< FBaseRewindHistory > &StateHistory)
Definition RewindData.h:1865
bool IsFinalResim() const
Definition RewindData.h:1804
void ExtractHistoryState(FGeometryParticleHandle &Handle, int32 &PositionValidCount, int32 &VelocityValidCount, int32 &PositionNextIterator, int32 &VelocityNextIterator)
Definition RewindData.h:1729
void Init(FPBDRigidsSolver *InSolver, int32 NumFrames, int32 InCurrentFrame)
Definition RewindData.h:1667
void RemoveObject(const FPBDJointConstraintHandle *Joint, const EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition RewindData.h:1703
int32 GetFramesSaved() const
Definition RewindData.h:1685
bool IsFrameWithinRewindHistory(int32 Frame)
Definition RewindData.h:1912
FReal GetDeltaTimeForFrame(int32 Frame) const
Definition RewindData.h:1687
bool IsResim() const
Definition RewindData.h:1799
void AddInputHistory(const TSharedPtr< FBaseRewindHistory > &InputHistory, Chaos::FGeometryParticleHandle *Particle)
Definition RewindData.h:1839
IResimCacheBase * GetCurrentStepResimCache() const
Definition RewindData.h:1748
int32 GetNumDirtyParticles() const
Definition RewindData.h:1810
void RemoveInputHistory(const TSharedPtr< FBaseRewindHistory > &InputHistory)
Definition RewindData.h:1833
int32 CurrentFrame() const
Definition RewindData.h:1683
Definition ParticleDirtyFlags.h:1228
Definition SingleParticlePhysicsProxy.h:58
Definition ResimCacheBase.h:11
Definition RewindData.h:2189
virtual int32 TriggerRewindIfNeeded_Internal(int32 LatestStepCompleted)
Definition RewindData.h:2217
virtual void ApplyCallbacks_Internal(int32 PhysicsStep, const TArray< ISimCallbackObject * > &SimCallbackObjects)
Definition RewindData.h:2198
virtual void ProcessInputs_Internal(int32 PhysicsStep, const TArray< FSimCallbackInputAndObject > &SimCallbackInputs)
Definition RewindData.h:2195
virtual void PostResimStep_Internal(int32 PhysicsStep)
Definition RewindData.h:2227
virtual void PreResimStep_Internal(int32 PhysicsStep, bool bFirstStep)
Definition RewindData.h:2222
virtual void ProcessInputs_External(int32 PhysicsStep, const TArray< FSimCallbackInputAndObject > &SimCallbackInputs)
Definition RewindData.h:2204
virtual void UnregisterRewindableSimCallback_Internal(ISimCallbackObject *Callback)
Definition RewindData.h:2233
virtual void InjectInputs_External(int32 PhysicsStep, int32 NumSteps)
Definition RewindData.h:2211
virtual ~IRewindCallback()=default
virtual void SetResimDebugInfo_Internal(const FResimDebugInfo &ResimDebugInfo)
Definition RewindData.h:2236
virtual void RegisterRewindableSimCallback_Internal(ISimCallbackObject *Callback)
Definition RewindData.h:2230
Definition SimCallbackObject.h:68
Definition RewindData.h:1543
const TVal & FindChecked(const TKey Key) const
Definition RewindData.h:1564
auto cend() const
Definition RewindData.h:1635
void Reset()
Definition RewindData.h:1623
decltype(ConstifyHelper(((TVal *) 0) ->GetObjectPtr())) TKey
Definition RewindData.h:1547
auto end()
Definition RewindData.h:1632
TVal & GetDenseAt(const int32 Idx)
Definition RewindData.h:1638
TVal * Find(const TKey Key)
Definition RewindData.h:1586
int32 Num() const
Definition RewindData.h:1629
auto cbegin() const
Definition RewindData.h:1634
void Remove(const TKey Key, const EAllowShrinking AllowShrinking)
Definition RewindData.h:1596
auto begin()
Definition RewindData.h:1631
TVal & Add(const TKey Key, TVal &&Val)
Definition RewindData.h:1549
const TVal * Find(const TKey Key) const
Definition RewindData.h:1576
void Shrink()
Definition RewindData.h:1618
const TVal & GetDenseAt(const int32 Idx) const
Definition RewindData.h:1637
TVal & FindChecked(const TKey Key)
Definition RewindData.h:1570
Definition ParticleHandle.h:436
Definition ParticleHandle.h:987
Definition PBDRigidParticles.h:22
Definition RewindData.h:630
bool IsEmpty() const
Definition RewindData.h:707
const bool GetHeadFrameAndPhase(FFrameAndPhase &OutFrameAndPhase) const
Definition RewindData.h:678
bool IsClean(const FFrameAndPhase FrameAndPhase) const
Definition RewindData.h:741
T & Insert(const FFrameAndPhase FrameAndPhase, FDirtyPropertiesPool &Manager)
Definition RewindData.h:759
bool IsInSync(const THandle &Handle, const FFrameAndPhase FrameAndPhase, const FDirtyPropertiesPool &Pool) const
Definition RewindData.h:747
void Reset()
Definition RewindData.h:702
void ClearEntryAndFuture(const FFrameAndPhase FrameAndPhase)
Definition RewindData.h:712
const T * Read(const FFrameAndPhase FrameAndPhase, const FDirtyPropertiesPool &Manager) const
Definition RewindData.h:671
TParticlePropertyBuffer(const TParticlePropertyBuffer< T, PropName > &Other)=delete
~TParticlePropertyBuffer()
Definition RewindData.h:651
TParticlePropertyBuffer(TParticlePropertyBuffer< T, PropName > &&Other)
Definition RewindData.h:639
TParticlePropertyBuffer(int32 InCapacity)
Definition RewindData.h:632
void Release(FDirtyPropertiesPool &Manager)
Definition RewindData.h:690
T & WriteAccessMonotonic(const FFrameAndPhase FrameAndPhase, FDirtyPropertiesPool &Manager)
Definition RewindData.h:658
void RestoreBufferState(const int32 &ValidCount, const int32 &NextIterator)
Definition RewindData.h:735
void ExtractBufferState(int32 &ValidCount, int32 &NextIterator) const
Definition RewindData.h:729
T * WriteAccessNonDecreasing(const FFrameAndPhase FrameAndPhase, FDirtyPropertiesPool &Manager)
Definition RewindData.h:665
Definition ParticleIterator.h:639
Definition RewindData.h:972
const T & Read() const
Definition RewindData.h:974
bool IsSet() const
Definition RewindData.h:986
void Write(const T &InVal)
Definition RewindData.h:980
Definition ParticleDirtyFlags.h:1303
void RemoveElement(const FPropertyIdx Idx)
Definition ParticleDirtyFlags.h:1320
Definition RewindData.h:1107
TShapesArrayState(const TParticle &InParticle, const FShapesArrayStateBase *InState)
Definition RewindData.h:1109
FPerShapeDataState operator[](const int32 ShapeIdx) const
Definition RewindData.h:1114
Definition Archive.h:1208
Definition PhysicsProxyBase.h:97
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
SizeType Insert(std::initializer_list< ElementType > InitList, const SizeType InIndex)
Definition Array.h:1875
Definition CircularBuffer.h:18
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT TWeakPtr< ObjectType, Mode > ToWeakPtr() const
Definition SharedPointer.h:1055
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
FString ToStringHelper(const T &Val)
Definition RewindData.h:1046
EPlasticityType
Definition PBDJointConstraintTypes.h:36
const T * ConstifyHelper(T *Ptr)
Definition RewindData.h:1535
int32 ComputeCircularSize(int32 NumFrames)
Definition RewindData.h:1163
FRealDouble FReal
Definition Real.h:22
EJointForceMode
Definition PBDJointConstraintTypes.h:30
EObjectStateType
Definition ObjectState.h:10
int32 FPropertyIdx
Definition ParticleDirtyFlags.h:1299
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
TGeometryParticleHandle< FReal, 3 > FGeometryParticleHandle
Definition ParticleHandleFwd.h:24
T NoRefHelper(const T &Ref)
Definition RewindData.h:1539
CHAOS_API int32 SkipDesyncTest
Definition RewindData.cpp:830
FPBDRigidsSolver FPBDRigidsSolver
Definition PBDRigidsEvolutionFwd.h:15
EJointMotionType
Definition PBDJointConstraintTypes.h:23
void CopyDataFromObject(TData &Data, const TObj &Obj)
Definition RewindData.h:618
EDesyncResult
Definition RewindData.h:945
@ InSync
Definition RewindData.h:946
@ Desync
Definition RewindData.h:947
@ NeedInfo
Definition RewindData.h:948
Definition OverriddenPropertySet.cpp:45
State
Definition PacketHandler.h:88
void MarkDirty(UE::Net::FReplicationStateHeader &InternalState, FNetBitArrayView &MemberChangeMask, const FReplicationStateMemberChangeMaskDescriptor &ChangeMaskInfo)
Definition ReplicationStateUtil.h:76
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
@ false
Definition radaudio_common.h:23
Definition RewindData.h:32
virtual bool CopyAlteredData(Chaos::FBaseRewindHistory &OutHistory, bool bIncludeUnimportant=true, bool bIncludeImportant=false)
Definition RewindData.h:90
virtual TUniquePtr< FBaseRewindHistory > Clone() const =0
virtual FORCEINLINE ~FBaseRewindHistory()
Definition RewindData.h:33
virtual FORCEINLINE void DebugData(const Chaos::FBaseRewindHistory &NewData, TArray< int32 > &LocalFrames, TArray< int32 > &ServerFrames, TArray< int32 > &InputFrames)
Definition RewindData.h:132
virtual FORCEINLINE bool ExtractData(const int32 ExtractFrame, const bool bResetSolver, void *HistoryData, const bool bExactFrame=false)
Definition RewindData.h:65
virtual const bool HasDataInHistory() const
Definition RewindData.h:152
virtual const int32 GetEarliestFrame() const
Definition RewindData.h:146
virtual bool CopyAllData(Chaos::FBaseRewindHistory &OutHistory, bool bIncludeUnimportant=true, bool bIncludeImportant=false)
Definition RewindData.h:85
virtual const int32 GetHistorySize() const
Definition RewindData.h:149
virtual FORCEINLINE void DebugData(const FString &DebugText)
Definition RewindData.h:129
virtual FORCEINLINE void ApplyDataRange(const int32 FromFrame, const int32 ToFrame, void *ActorComponent, const bool bOnlyImportant=false)
Definition RewindData.h:68
virtual bool CopyData(Chaos::FBaseRewindHistory &OutHistory, const uint32 StartFrame, const uint32 EndFrame, bool bIncludeUnimportant=true, bool bIncludeImportant=false)
Definition RewindData.h:97
virtual FORCEINLINE bool HasValidData(const int32 ValidFrame) const
Definition RewindData.h:48
virtual TUniquePtr< FBaseRewindHistory > CopyFramesWithOffset(const uint32 StartFrame, const uint32 EndFrame, const int32 FrameOffset)=0
virtual FORCEINLINE int32 CountAlteredData(const bool bIncludeUnimportant=true, const bool bIncludeImportant=false)
Definition RewindData.h:58
virtual FORCEINLINE void SetRecordDataIncremental(const bool bInIncremental)
Definition RewindData.h:80
virtual FORCEINLINE int32 CountValidData(const uint32 StartFrame, const uint32 EndFrame, const bool bIncludeUnimportant=true, const bool bIncludeImportant=false)
Definition RewindData.h:55
virtual int32 ReceiveNewData(FBaseRewindHistory &NewData, const int32 FrameOffset, const bool CompareDataForRewind=false, const bool bImportant=false, int32 TryInjectAtFrame=INDEX_NONE)
Definition RewindData.h:110
virtual void NetSerialize(FArchive &Ar, UPackageMap *PackageMap, TUniqueFunction< void(void *Data, const int32 DataIndex)> DataSetupFunction)
Definition RewindData.h:123
virtual FORCEINLINE bool ApplyInputs(const int32 ApplyFrame, const bool bResetSolver)
Definition RewindData.h:140
virtual FORCEINLINE void SetImportant(const bool bImportant, const int32 Frame=INDEX_NONE)
Definition RewindData.h:62
virtual FORCEINLINE void MergeData(const int32 FromFrame, void *ToData)
Definition RewindData.h:71
virtual bool CopyAllDataGrowingOrdered(Chaos::FBaseRewindHistory &OutHistory)
Definition RewindData.h:100
virtual void NetSerialize(FArchive &Ar, UPackageMap *PackageMap)
Definition RewindData.h:120
virtual FORCEINLINE void SetPackageMap(class UPackageMap *InPackageMap)
Definition RewindData.h:45
virtual FORCEINLINE bool RecordDataGrowingOrdered(const void *HistoryData)
Definition RewindData.h:77
virtual FORCEINLINE bool RewindStates(const int32 RewindFrame, const bool bResetSolver)
Definition RewindData.h:136
virtual FORCEINLINE bool RecordData(const int32 RecordFrame, const void *HistoryData)
Definition RewindData.h:74
virtual const int32 GetLatestFrame() const
Definition RewindData.h:143
virtual TUniquePtr< FBaseRewindHistory > CreateNew() const =0
virtual void ValidateDataInHistory(const void *ActorComponent)
Definition RewindData.h:126
virtual void ResetFast()
Definition RewindData.h:158
virtual void Initialize()
Definition RewindData.h:42
virtual void ResizeDataHistory(const int32 FrameCount, const EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition RewindData.h:155
Definition RewindData.h:962
FConstDirtyPropData(const FDirtyPropertiesManager *InManager, int32 InDataIdx)
Definition RewindData.h:963
int32 DataIdx
Definition RewindData.h:967
const FDirtyPropertiesManager * Ptr
Definition RewindData.h:966
Definition RewindData.h:953
int32 DataIdx
Definition RewindData.h:958
FDirtyPropertiesManager * Ptr
Definition RewindData.h:957
FDirtyPropData(FDirtyPropertiesManager *InManager, int32 InDataIdx)
Definition RewindData.h:954
Definition ChaosMarshallingManager.h:21
Definition PullPhysicsDataImp.h:62
Definition RewindData.h:551
uint32 Phase
Definition RewindData.h:571
bool operator<(const FFrameAndPhase &Other) const
Definition RewindData.h:573
bool operator<=(const FFrameAndPhase &Other) const
Definition RewindData.h:578
EParticleHistoryPhase
Definition RewindData.h:553
@ PostCallbacks
Definition RewindData.h:565
@ NumPhases
Definition RewindData.h:567
@ PostPushData
Definition RewindData.h:561
@ PrePushData
Definition RewindData.h:558
bool operator==(const FFrameAndPhase &Other) const
Definition RewindData.h:583
int32 Frame
Definition RewindData.h:570
Definition RewindData.h:1166
bool IsCleanExcludingDynamics(const FFrameAndPhase FrameAndPhase) const
Definition RewindData.h:1265
void Reset()
Definition RewindData.h:1223
TParticlePropertyBuffer< FParticleVelocities, EChaosProperty::Velocities > Velocities
Definition RewindData.h:1300
TParticlePropertyBuffer< FParticleDynamicMisc, EChaosProperty::DynamicMisc, false > TargetStates
Definition RewindData.h:1308
FShapesArrayStateBase ShapesArrayState
Definition RewindData.h:1310
void SyncDirtyDynamics(FDirtyPropData &DestManager, const FDirtyChaosProperties &Dirty, const FConstDirtyPropData &SrcManager)
Definition RewindData.cpp:54
TParticlePropertyBuffer< FParticleVelocities, EChaosProperty::Velocities, false > TargetVelocities
Definition RewindData.h:1307
TParticlePropertyBuffer< FParticlePositionRotation, EChaosProperty::XR > ParticlePositionRotation
Definition RewindData.h:1298
TParticlePropertyBuffer< FParticlePositionRotation, EChaosProperty::XR, false > TargetPositions
Definition RewindData.h:1306
TParticlePropertyBuffer< FParticleDynamics, EChaosProperty::Dynamics, false > Dynamics
Definition RewindData.h:1301
void SyncSimWritablePropsFromSim(FDirtyPropData Manager, const TPBDRigidParticleHandle< FReal, 3 > &Rigid)
Definition RewindData.cpp:20
PRAGMA_ENABLE_DEPRECATION_WARNINGS void Release(FDirtyPropertiesPool &Manager)
Definition RewindData.h:1209
FGeometryParticleStateBase(const FGeometryParticleStateBase &Other)=delete
FGeometryParticleStateBase()=delete
FParticlePositionRotation PreCorrectionXR
Definition RewindData.h:1313
static TShapesArrayState< TParticle > ShapesArray(const FGeometryParticleStateBase *State, const TParticle &Particle)
Definition RewindData.h:1279
bool IsClean(const FFrameAndPhase FrameAndPhase) const
Definition RewindData.h:1260
void RestoreHistoryState(const int32 &PositionValidCount, const int32 &VelocityValidCount, const int32 &PositionNextIterator, const int32 &VelocityNextIterator)
Definition RewindData.h:1254
TParticlePropertyBuffer< FKinematicTarget, EChaosProperty::KinematicTarget, false > KinematicTarget
Definition RewindData.h:1304
FGeometryParticleStateBase & operator=(const FGeometryParticleStateBase &)=delete
bool IsInSync(const FGeometryParticleHandle &Handle, const FFrameAndPhase FrameAndPhase, const FDirtyPropertiesPool &Pool) const
Definition RewindData.cpp:74
~FGeometryParticleStateBase()=default
FGeometryParticleStateBase(int32 NumFrames, bool bCacheOnePhase)
Definition RewindData.h:1183
void ClearEntryAndFuture(const FFrameAndPhase FrameAndPhase)
Definition RewindData.h:1237
TParticlePropertyBuffer< FParticleDynamicMisc, EChaosProperty::DynamicMisc > DynamicsMisc
Definition RewindData.h:1302
FGeometryParticleStateBase & operator=(FGeometryParticleStateBase &&)=delete
FGeometryParticleStateBase(FGeometryParticleStateBase &&Other)=default
void ExtractHistoryState(int32 &PositionValidCount, int32 &VelocityValidCount, int32 &PositionNextIterator, int32 &VelocityNextIterator) const
Definition RewindData.h:1248
TParticlePropertyBuffer< FParticleNonFrequentData, EChaosProperty::NonFrequentData > NonFrequentData
Definition RewindData.h:1299
void CachePreCorrectionState(const TParticle &Particle)
Definition RewindData.h:1289
TParticlePropertyBuffer< FParticleMassProps, EChaosProperty::MassProps > MassProps
Definition RewindData.h:1303
Definition RewindData.h:1444
void Release(FDirtyPropertiesPool &Manager)
Definition RewindData.h:1462
bool IsClean(const FFrameAndPhase FrameAndPhase) const
Definition RewindData.h:1480
FJointStateBase(const FJointStateBase &Other)=delete
TParticlePropertyBuffer< FProxyBasePairProperty, EChaosProperty::JointParticleProxies > JointProxies
Definition RewindData.h:1489
void Reset()
Definition RewindData.h:1468
~FJointStateBase()=default
FJointStateBase(FJointStateBase &&Other)=default
FJointStateBase(int32 NumFrames, bool bCacheOnePhase)
Definition RewindData.h:1452
TParticlePropertyBuffer< FPBDJointSettings, EChaosProperty::JointSettings > JointSettings
Definition RewindData.h:1488
void ClearEntryAndFuture(const FFrameAndPhase FrameAndPhase)
Definition RewindData.h:1474
Definition RewindData.h:997
static const FCollisionFilterData & GetQueryData(const FPerShapeDataStateBase *State, const TParticle &Particle, int32 ShapeIdx)
Definition RewindData.h:1003
TPerShapeDataStateProperty< FCollisionData, EShapeProperty::CollisionData > CollisionData
Definition RewindData.h:998
TPerShapeDataStateProperty< FMaterialData, EShapeProperty::Materials > MaterialData
Definition RewindData.h:999
Definition RewindData.h:612
FFrameAndPhase FrameAndPhase
Definition RewindData.h:614
FPropertyIdx Ref
Definition RewindData.h:613
Definition RewindData.h:2183
Definition RewindData.h:1030
TArray< FPerShapeDataStateBase > PerShapeData
Definition RewindData.h:1031
FPerShapeDataStateBase & FindOrAdd(const int32 ShapeIdx)
Definition RewindData.h:1033
static bool Helper(const THandle &Handle)
Definition RewindData.h:602
Definition RewindData.h:591
static bool Helper(const THandle &Handle)
Definition RewindData.h:592
Definition RewindData.h:164
virtual FORCEINLINE bool ExtractData(const int32 ExtractFrame, const bool bResetSolver, void *HistoryData, const bool bExactFrame=false) override
Definition RewindData.h:219
DataType & GetAndLoadEarliestData()
Definition RewindData.h:405
int32 LatestFrame
Definition RewindData.h:538
int32 CurrentFrame
Definition RewindData.h:541
FORCEINLINE void ResizeDataHistory(const int32 FrameCount, const EAllowShrinking AllowShrinking=EAllowShrinking::Default) override
Definition RewindData.h:492
DataType & GetCurrentData()
Definition RewindData.h:400
FORCEINLINE TDataRewindHistory(const int32 FrameCount, const bool bIsHistoryLocal)
Definition RewindData.h:165
virtual const bool HasDataInHistory() const
Definition RewindData.h:486
virtual FORCEINLINE void SetRecordDataIncremental(const bool bInIncremental) override
Definition RewindData.h:382
virtual const int32 GetHistorySize() const
Definition RewindData.h:481
int32 NumFrames
Definition RewindData.h:547
const TArray< DataType > & GetDataHistoryConst() const
Definition RewindData.h:456
virtual void Initialize()
Definition RewindData.h:179
virtual FORCEINLINE void MergeData(int32 FromFrame, void *ToData) override
Definition RewindData.h:293
bool bIncremental
Definition RewindData.h:532
TArray< DataType > DataHistory
Definition RewindData.h:535
virtual bool CopyAllDataGrowingOrdered(Chaos::FBaseRewindHistory &OutHistory) override
Definition RewindData.h:387
int32 CurrentIndex
Definition RewindData.h:544
virtual FORCEINLINE ~TDataRewindHistory()
Definition RewindData.h:176
TArray< DataType > & GetDataHistory()
Definition RewindData.h:455
FORCEINLINE const uint32 GetFrameIndex(const int32 Frame) const
Definition RewindData.h:503
virtual FORCEINLINE void ResetFast()
Definition RewindData.h:519
FORCEINLINE bool EvalData(const int32 EvalFrame)
Definition RewindData.h:317
const DataType & GetCurrentData() const
Definition RewindData.h:402
virtual const int32 GetEarliestFrame() const override
Definition RewindData.h:465
FORCEINLINE int32 ClosestData(const int32 DataFrame, const bool bMinData)
Definition RewindData.h:192
virtual const int32 GetLatestFrame() const override
Definition RewindData.h:459
virtual FORCEINLINE bool HasValidData(const int32 ValidFrame) const override
Definition RewindData.h:212
virtual FORCEINLINE bool RecordData(const int32 RecordFrame, const void *HistoryData) override
Definition RewindData.h:329
bool bIsLocalHistory
Definition RewindData.h:529
DataType * GetAndLoadNextIncrementalData()
Definition RewindData.h:423
FORCEINLINE TDataRewindHistory(const int32 FrameCount)
Definition RewindData.h:171
FORCEINLINE bool LoadData(const int32 LoadFrame)
Definition RewindData.h:308
virtual FORCEINLINE bool RecordDataGrowingOrdered(const void *HistoryData) override
Definition RewindData.h:347
FORCEINLINE uint32 NumValidData(const uint32 StartFrame, const uint32 EndFrame) const
Definition RewindData.h:441
Definition CollisionFilterData.h:46
Definition NetworkPhysicsComponent.h:680
static CORE_API const TQuat< double > Identity
Definition Quat.h:63