Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
USnapshotSubsystem 클래스 참조

#include <SnapshotSubsystem.h>

USnapshotSubsystem에 대한 상속 다이어그램 :
Inheritance graph
USnapshotSubsystem에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

 USnapshotSubsystem ()
 
virtual void Deinitialize () override
 
bool ProcessCommand (UCommandBase *Command)
 
void RecordCommand (UCommandBase *Command)
 
void MarkRollbackPoint (FName RollbackPointID)
 
bool RollbackTo (FName RollbackPointID)
 
void ResetCommands ()
 
template<typename TCommandType , typename TInitializeCommand >
TCommandType * ProcessNewCommand (TInitializeCommand InitializeCommand)
 
FORCEINLINE bool IsRollingBack () const
 

정적 Public 멤버 함수

template<typename TCommandType , typename TInitializeCommand >
static TCommandType * ProcessNewCommand (UObject *WorldContextObject, TInitializeCommand InitializeCommand)
 

Private 속성

TArray< TObjectPtr< UCommandBase > > CommandStack
 
TMap< FName, int32 > RollbackPointByID
 
int32 RollbackDepth = 0
 

생성자 & 소멸자 문서화

◆ USnapshotSubsystem()

USnapshotSubsystem::USnapshotSubsystem ( )
10{
11#if WITH_EDITOR
12 FCK_ConsoleCommands::RegisterSnapshotCommands(this);
13#endif
14}

멤버 함수 문서화

◆ Deinitialize()

void USnapshotSubsystem::Deinitialize ( )
overridevirtual
18{
20 Super::Deinitialize();
21}
void ResetCommands()
Definition SnapshotSubsystem.cpp:101
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IsRollingBack()

FORCEINLINE bool USnapshotSubsystem::IsRollingBack ( ) const
inline
44 {
45 return RollbackDepth > 0;
46 }
int32 RollbackDepth
Definition SnapshotSubsystem.h:54
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ MarkRollbackPoint()

void USnapshotSubsystem::MarkRollbackPoint ( FName  RollbackPointID)
53{
54 if (RollbackPointID.IsNone())
55 {
56 return;
57 }
58
59 RollbackPointByID.FindOrAdd(RollbackPointID) = CommandStack.Num();
60}
TArray< TObjectPtr< UCommandBase > > CommandStack
Definition SnapshotSubsystem.h:50
TMap< FName, int32 > RollbackPointByID
Definition SnapshotSubsystem.h:53

◆ ProcessCommand()

bool USnapshotSubsystem::ProcessCommand ( UCommandBase Command)
25{
26 if (Command == nullptr)
27 {
28 return false;
29 }
30
31 if (Command->Process() == false)
32 {
33 return false;
34 }
35
36 RecordCommand(Command);
37 return true;
38}
virtual bool Process()
Definition CommandBase.cpp:6
void RecordCommand(UCommandBase *Command)
Definition SnapshotSubsystem.cpp:41
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ProcessNewCommand() [1/2]

template<typename TCommandType , typename TInitializeCommand >
TCommandType * USnapshotSubsystem::ProcessNewCommand ( TInitializeCommand  InitializeCommand)
60{
61 static_assert(TIsDerivedFrom<TCommandType, UCommandBase>::Value, "TCommandType must derive from UCommandBase.");
62
63 if (IsRollingBack())
64 {
65 return nullptr;
66 }
67
68 TCommandType* Command = NewObject<TCommandType>(this);
69
70 if (Command == nullptr)
71 {
72 return nullptr;
73 }
74
75 InitializeCommand(Command);
76
77 if (ProcessCommand(Command) == false)
78 {
79 return nullptr;
80 }
81 else
82 {
83 return Command;
84 }
85}
bool ProcessCommand(UCommandBase *Command)
Definition SnapshotSubsystem.cpp:24
FORCEINLINE bool IsRollingBack() const
Definition SnapshotSubsystem.h:43
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ProcessNewCommand() [2/2]

template<typename TCommandType , typename TInitializeCommand >
TCommandType * USnapshotSubsystem::ProcessNewCommand ( UObject *  WorldContextObject,
TInitializeCommand  InitializeCommand 
)
static
90{
91 static_assert(TIsDerivedFrom<TCommandType, UCommandBase>::Value, "TCommandType must derive from UCommandBase.");
92
93 if (WorldContextObject == nullptr)
94 {
95 return nullptr;
96 }
97
98 UGameInstance* GameInstance = Cast<UGameInstance>(WorldContextObject);
99
100 if (GameInstance == nullptr)
101 {
102 UWorld* World = WorldContextObject->GetWorld();
103 GameInstance = World ? World->GetGameInstance() : nullptr;
104 check(GameInstance);
105 }
106
107 USnapshotSubsystem* SnapshotSubsystem = GameInstance->GetSubsystem<USnapshotSubsystem>();
108
109 if (SnapshotSubsystem == nullptr)
110 {
111 LOG_ERROR(LogCK, "%s를 가져올 수 없습니다. ", NAMEOF(USnapshotSubsystem));
112 return nullptr;
113 }
114 else
115 {
116 return SnapshotSubsystem->ProcessNewCommand<TCommandType>(InitializeCommand);
117 }
118}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF(Type)
Definition CK_UE.h:30
Definition SnapshotSubsystem.h:16
TCommandType * ProcessNewCommand(TInitializeCommand InitializeCommand)
Definition SnapshotSubsystem.h:59
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RecordCommand()

void USnapshotSubsystem::RecordCommand ( UCommandBase Command)
42{
43 if (Command == nullptr || IsRollingBack())
44 {
45 return;
46 }
47
48 CommandStack.Add(Command);
49}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResetCommands()

void USnapshotSubsystem::ResetCommands ( )
102{
103 CommandStack.Empty();
104 RollbackPointByID.Empty();
105 RollbackDepth = 0;
106}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RollbackTo()

bool USnapshotSubsystem::RollbackTo ( FName  RollbackPointID)
64{
65 const int32* FoundIndex = RollbackPointByID.Find(RollbackPointID);
66
67 if (FoundIndex == nullptr)
68 {
69 return false;
70 }
71
72 const int32 TargetIndex = FMath::Clamp(*FoundIndex, 0, CommandStack.Num());
73
75
76 for (int32 Index = CommandStack.Num() - 1; Index >= TargetIndex; --Index)
77 {
78 UCommandBase* Command = CommandStack[Index];
79
80 if (Command)
81 {
82 Command->Undo();
83 }
84 }
85
86 CommandStack.SetNum(TargetIndex);
87
88 for (auto It = RollbackPointByID.CreateIterator(); It; ++It)
89 {
90 if (It.Value() > TargetIndex)
91 {
92 It.RemoveCurrent();
93 }
94 }
95
97 return true;
98}
Definition CommandBase.h:11
virtual void Undo()
Definition CommandBase.cpp:12
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ CommandStack

TArray<TObjectPtr<UCommandBase> > USnapshotSubsystem::CommandStack
private

◆ RollbackDepth

int32 USnapshotSubsystem::RollbackDepth = 0
private

◆ RollbackPointByID

TMap<FName, int32> USnapshotSubsystem::RollbackPointByID
private

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: