UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SimCallbackInput.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Containers/Queue.h"
5#include "Chaos/Defines.h"
6#include "Chaos/Core.h"
7
8class FNetBitReader;
9class FNetBitWriter;
11
12namespace Chaos
13{
14
15class ISimCallbackObject;
16
18{
20 : InternalTime(-1)
21 {
22 }
23
26
27protected:
28
29 // Do not delete directly, use FreeOutputData_External
31};
32
34{
36 : NumSteps(0)
37 {
38 }
39
40 //Called by substep code so we can reuse input for multiple steps
42 {
43 NumSteps = InNumSteps;
44 }
45
46 virtual bool NetSendInputCmd(FNetBitWriter& Ar) { return false; }
47 virtual bool NetRecvInputCmd(APlayerController* PC, FNetBitReader& Ar) { return false; }
48
49protected:
50 // Do not delete directly, use FreeInputData_Internal
51 virtual ~FSimCallbackInput() = default;
52
53private:
54 int32 NumSteps; //the number of steps this input belongs to
55
56 void Release_Internal(ISimCallbackObject& CallbackObj);
57
58 friend struct FPushPhysicsData;
59};
60
62{
63 void Reset(){}
64};
65
67{
68 void Reset() {}
69};
70
74{
75public:
77 : SimCallbackOutput(nullptr)
78 , SimCallbackObject(nullptr)
79 {
80 }
81
83 : SimCallbackOutput(Output)
84 , SimCallbackObject(InCallbackObject)
85 {
86 ensure(Output == nullptr || InCallbackObject != nullptr); //can't have one but not the other
87 }
90
92 {
93 if(&Other != this)
94 {
95 Free_External();
96 SimCallbackOutput = Other.SimCallbackOutput;
97 Other.SimCallbackOutput = nullptr;
98
99 SimCallbackObject = Other.SimCallbackObject;
100 Other.SimCallbackObject = nullptr;
101 }
102
103 return *this;
104 }
106 : SimCallbackOutput(Other.SimCallbackOutput)
107 , SimCallbackObject(Other.SimCallbackObject)
108 {
109 Other.SimCallbackOutput = nullptr;
110 Other.SimCallbackObject = nullptr;
111 }
112
114 {
115 Free_External();
116 }
117
118 operator bool() const { return SimCallbackOutput != nullptr; }
119
120 FSimCallbackOutput* Get() { return SimCallbackOutput; }
121 const FSimCallbackOutput* Get() const { return SimCallbackOutput; }
122
123 FSimCallbackOutput* operator->() { return SimCallbackOutput; }
124 const FSimCallbackOutput* operator->() const { return SimCallbackOutput; }
125
126 FSimCallbackOutput& operator*() { return *SimCallbackOutput; }
127 const FSimCallbackOutput& operator*() const { return *SimCallbackOutput; }
128private:
129
130 void Free_External();
131
132 FSimCallbackOutput* SimCallbackOutput;
133 ISimCallbackObject* SimCallbackObject;
134};
135
139template <typename T>
141{
142public:
143
145
147 : FSimCallbackOutputHandle(Output, CallbackObject)
148 {
149 }
150
151 T* Get() { return static_cast<T*>(FSimCallbackOutputHandle::Get());}
152 const T* Get() const { return static_cast<const T*>(FSimCallbackOutputHandle::Get()); }
153
154 T* operator->() { return static_cast<T*>(FSimCallbackOutputHandle::Get()); }
155 const T* operator->() const { return static_cast<const T*>(FSimCallbackOutputHandle::Get()); }
156
157 T& operator*() { return static_cast<T&>(FSimCallbackOutputHandle::operator*()); }
158 const T& operator*() const { return static_cast<const T&>(FSimCallbackOutputHandle::operator*()); }
159};
160
161}; // namespace Chaos
#define ensure( InExpression)
Definition AssertionMacros.h:464
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
Definition PlayerController.h:261
Definition SimCallbackInput.h:74
~FSimCallbackOutputHandle()
Definition SimCallbackInput.h:113
FSimCallbackOutput * operator->()
Definition SimCallbackInput.h:123
const FSimCallbackOutput * Get() const
Definition SimCallbackInput.h:121
FSimCallbackOutputHandle()
Definition SimCallbackInput.h:76
FSimCallbackOutputHandle(FSimCallbackOutputHandle &&Other)
Definition SimCallbackInput.h:105
const FSimCallbackOutput & operator*() const
Definition SimCallbackInput.h:127
FSimCallbackOutputHandle & operator=(FSimCallbackOutputHandle &&Other)
Definition SimCallbackInput.h:91
FSimCallbackOutputHandle(FSimCallbackOutput *Output, ISimCallbackObject *InCallbackObject)
Definition SimCallbackInput.h:82
FSimCallbackOutputHandle & operator=(const FSimCallbackOutputHandle &Other)=delete
const FSimCallbackOutput * operator->() const
Definition SimCallbackInput.h:124
FSimCallbackOutputHandle(const FSimCallbackOutputHandle &Other)=delete
FSimCallbackOutput & operator*()
Definition SimCallbackInput.h:126
FSimCallbackOutput * Get()
Definition SimCallbackInput.h:120
Definition SimCallbackObject.h:68
Definition SimCallbackInput.h:141
TSimCallbackOutputHandle()
Definition SimCallbackInput.h:144
T * Get()
Definition SimCallbackInput.h:151
const T * operator->() const
Definition SimCallbackInput.h:155
T & operator*()
Definition SimCallbackInput.h:157
const T & operator*() const
Definition SimCallbackInput.h:158
T * operator->()
Definition SimCallbackInput.h:154
TSimCallbackOutputHandle(T *Output, ISimCallbackObject *CallbackObject)
Definition SimCallbackInput.h:146
const T * Get() const
Definition SimCallbackInput.h:152
Definition CoreNet.h:415
Definition CoreNet.h:384
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
Definition ChaosMarshallingManager.h:286
Definition SimCallbackInput.h:34
void SetNumSteps_External(int32 InNumSteps)
Definition SimCallbackInput.h:41
FSimCallbackInput()
Definition SimCallbackInput.h:35
virtual bool NetSendInputCmd(FNetBitWriter &Ar)
Definition SimCallbackInput.h:46
virtual ~FSimCallbackInput()=default
virtual bool NetRecvInputCmd(APlayerController *PC, FNetBitReader &Ar)
Definition SimCallbackInput.h:47
Definition SimCallbackInput.h:62
void Reset()
Definition SimCallbackInput.h:63
Definition SimCallbackInput.h:67
void Reset()
Definition SimCallbackInput.h:68
Definition SimCallbackInput.h:18
FSimCallbackOutput()
Definition SimCallbackInput.h:19
FReal InternalTime
Definition SimCallbackInput.h:25