initial Commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.vs/
|
||||||
|
.vsconfig
|
||||||
|
Binaries/
|
||||||
|
Intermediate/
|
||||||
0
Config/DefaultEditor.ini
Normal file
0
Config/DefaultEditor.ini
Normal file
84
Config/DefaultEngine.ini
Normal file
84
Config/DefaultEngine.ini
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
|
GameDefaultMap=/Engine/Maps/Templates/OpenWorld
|
||||||
|
|
||||||
|
[/Script/Engine.RendererSettings]
|
||||||
|
r.AllowStaticLighting=False
|
||||||
|
|
||||||
|
r.GenerateMeshDistanceFields=True
|
||||||
|
|
||||||
|
r.DynamicGlobalIlluminationMethod=1
|
||||||
|
|
||||||
|
r.ReflectionMethod=1
|
||||||
|
|
||||||
|
r.SkinCache.CompileShaders=True
|
||||||
|
|
||||||
|
r.RayTracing=True
|
||||||
|
|
||||||
|
r.RayTracing.RayTracingProxies.ProjectEnabled=True
|
||||||
|
|
||||||
|
r.Substrate=True
|
||||||
|
|
||||||
|
r.Substrate.ProjectGBufferFormat=0
|
||||||
|
|
||||||
|
r.Shadow.Virtual.Enable=1
|
||||||
|
|
||||||
|
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
||||||
|
|
||||||
|
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
|
||||||
|
|
||||||
|
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
|
||||||
|
|
||||||
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
-D3D12TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D12TargetedShaderFormats=PCD3D_SM6
|
||||||
|
-D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
Compiler=Default
|
||||||
|
AudioSampleRate=48000
|
||||||
|
AudioCallbackBufferFrameSize=1024
|
||||||
|
AudioNumBuffersToEnqueue=1
|
||||||
|
AudioMaxChannels=0
|
||||||
|
AudioNumSourceWorkers=4
|
||||||
|
SpatializationPlugin=
|
||||||
|
SourceDataOverridePlugin=
|
||||||
|
ReverbPlugin=
|
||||||
|
OcclusionPlugin=
|
||||||
|
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
|
||||||
|
CacheSizeKB=65536
|
||||||
|
MaxChunkSizeOverrideKB=0
|
||||||
|
bResampleForDevice=False
|
||||||
|
MaxSampleRate=48000.000000
|
||||||
|
HighSampleRate=32000.000000
|
||||||
|
MedSampleRate=24000.000000
|
||||||
|
LowSampleRate=12000.000000
|
||||||
|
MinSampleRate=8000.000000
|
||||||
|
CompressionQualityModifier=1.000000
|
||||||
|
AutoStreamingThreshold=0.000000
|
||||||
|
SoundCueCookQualityIndex=-1
|
||||||
|
|
||||||
|
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
|
||||||
|
-TargetedRHIs=SF_VULKAN_SM5
|
||||||
|
+TargetedRHIs=SF_VULKAN_SM6
|
||||||
|
|
||||||
|
[/Script/MacTargetPlatform.MacTargetSettings]
|
||||||
|
-TargetedRHIs=SF_METAL_SM5
|
||||||
|
+TargetedRHIs=SF_METAL_SM6
|
||||||
|
[/Script/HardwareTargeting.HardwareTargetingSettings]
|
||||||
|
TargetedHardwareClass=EHardwareClass::Desktop
|
||||||
|
DefaultGraphicsPerformance=EGraphicsPreset::Maximum
|
||||||
|
|
||||||
|
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
|
||||||
|
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
|
||||||
|
|
||||||
|
[/Script/Engine.UserInterfaceSettings]
|
||||||
|
bAuthorizeAutomaticWidgetVariableCreation=False
|
||||||
|
FontDPIPreset=Standard
|
||||||
|
FontDPI=72
|
||||||
|
|
||||||
|
[/Script/Engine.Engine]
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/PS_Replay")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/PS_Replay")
|
||||||
6
Config/DefaultGame.ini
Normal file
6
Config/DefaultGame.ini
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
[/Script/CommonUI.CommonUISettings]
|
||||||
|
CommonButtonAcceptKeyHandling=TriggerClick
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GeneralProjectSettings]
|
||||||
|
ProjectID=602745A74504534FD4858694961F9541
|
||||||
84
Config/DefaultInput.ini
Normal file
84
Config/DefaultInput.ini
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
[/Script/Engine.InputSettings]
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
bAltEnterTogglesFullscreen=True
|
||||||
|
bF11TogglesFullscreen=True
|
||||||
|
bUseMouseForTouch=False
|
||||||
|
bEnableMouseSmoothing=True
|
||||||
|
bEnableFOVScaling=True
|
||||||
|
bCaptureMouseOnLaunch=True
|
||||||
|
bEnableLegacyInputScales=True
|
||||||
|
bEnableMotionControls=True
|
||||||
|
bFilterInputByPlatformUser=False
|
||||||
|
bShouldFlushPressedKeysOnViewportFocusLost=True
|
||||||
|
bAlwaysShowTouchInterface=False
|
||||||
|
bShowConsoleOnFourFingerTap=True
|
||||||
|
bEnableGestureRecognizer=False
|
||||||
|
bUseAutocorrect=False
|
||||||
|
DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
|
||||||
|
DefaultViewportMouseLockMode=LockOnCapture
|
||||||
|
FOVScale=0.011110
|
||||||
|
DoubleClickTime=0.200000
|
||||||
|
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
|
||||||
|
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
|
||||||
|
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
|
||||||
|
-ConsoleKeys=Tilde
|
||||||
|
+ConsoleKeys=Tilde
|
||||||
|
|
||||||
3440
PS_Replay.sln
Normal file
3440
PS_Replay.sln
Normal file
File diff suppressed because it is too large
Load Diff
22
PS_Replay.uproject
Normal file
22
PS_Replay.uproject
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"EngineAssociation": "5.7",
|
||||||
|
"Category": "",
|
||||||
|
"Description": "",
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "PS_Replay",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Plugins": [
|
||||||
|
{
|
||||||
|
"Name": "ModelingToolsEditorMode",
|
||||||
|
"Enabled": true,
|
||||||
|
"TargetAllowList": [
|
||||||
|
"Editor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
28
Plugins/PS_ReplaySystem/ReplaySystem.uplugin
Normal file
28
Plugins/PS_ReplaySystem/ReplaySystem.uplugin
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"Version": 1,
|
||||||
|
"VersionName": "1.0",
|
||||||
|
"FriendlyName": "ReplaySystem",
|
||||||
|
"Description": "Exposes the Unreal replay system to blueprints",
|
||||||
|
"Category": "Replay",
|
||||||
|
"CreatedBy": "TareE",
|
||||||
|
"CreatedByURL": "https://www.oyintare.dev/",
|
||||||
|
"DocsURL": "https://replay.oyintare.dev/",
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/1b0cbe31111d482baaf531d187651e7f",
|
||||||
|
"SupportURL": "",
|
||||||
|
"CanContainContent": true,
|
||||||
|
"Installed": true,
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "ReplaySystem",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "EarliestPossible",
|
||||||
|
"PlatformAllowList": [
|
||||||
|
"Win64",
|
||||||
|
"Mac",
|
||||||
|
"Linux",
|
||||||
|
"Android"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Plugins/PS_ReplaySystem/Resources/Icon128.png
Normal file
BIN
Plugins/PS_ReplaySystem/Resources/Icon128.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "DeleteReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
|
||||||
|
|
||||||
|
void UDeleteReplayObject::DeleteReplay(const FString& ReplayName)
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
OnDeleteFinishedStreamCompleteDel = FDeleteFinishedStreamCallback::CreateUObject(this, &UDeleteReplayObject::OnDeleteFinishedStreamComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->DeleteFinishedStream(ReplayName, OnDeleteFinishedStreamCompleteDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDeleteReplayObject::OnDeleteFinishedStreamComplete(const FDeleteFinishedStreamResult& Result)
|
||||||
|
{
|
||||||
|
const bool WasSuccessful = Result.WasSuccessful();
|
||||||
|
OnDeleteComplete.Broadcast(WasSuccessful);
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "GetSavedReplaysObject.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
|
||||||
|
|
||||||
|
void UGetSavedReplaysObject::GetSavedReplays()
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
EnumerateStreamsCallbackDel = FEnumerateStreamsCallback::CreateUObject(this, &UGetSavedReplaysObject::OnEnumerateStreamsComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->EnumerateStreams(FNetworkReplayVersion(), INDEX_NONE, FString(), TArray<FString>(), EnumerateStreamsCallbackDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UGetSavedReplaysObject::OnEnumerateStreamsComplete(const FEnumerateStreamsResult& Result)
|
||||||
|
{
|
||||||
|
|
||||||
|
TArray<UReplayObject* > Replays;
|
||||||
|
|
||||||
|
TArray<FNetworkReplayStreamInfo> StreamInfos = Result.FoundStreams;
|
||||||
|
|
||||||
|
for (FNetworkReplayStreamInfo StreamInfo : StreamInfos)
|
||||||
|
{
|
||||||
|
FReplayInfo ReplayInfoTemp;
|
||||||
|
ReplayInfoTemp.FriendlyName = StreamInfo.FriendlyName;
|
||||||
|
ReplayInfoTemp.ActualName = StreamInfo.Name;
|
||||||
|
ReplayInfoTemp.RecordDate = StreamInfo.Timestamp;
|
||||||
|
ReplayInfoTemp.LengthInMS = StreamInfo.LengthInMS;
|
||||||
|
const float SizeInKb = StreamInfo.SizeInBytes / 1024.0f;
|
||||||
|
ReplayInfoTemp.SizeInMb = SizeInKb / 1024.0f;
|
||||||
|
|
||||||
|
UReplayObject* ReplayObj = NewObject<UReplayObject>();
|
||||||
|
ReplayObj->ReplayInfo = ReplayInfoTemp;
|
||||||
|
Replays.Add(ReplayObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
OnGetReplaysComplete.Broadcast(Replays);
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "GoToTimeObject.h"
|
||||||
|
#include "Engine.h"
|
||||||
|
#include "ReplayPlayerController.h"
|
||||||
|
#include "ReplaySystemBPLibrary.h"
|
||||||
|
#include "Engine/DemoNetDriver.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
#include "Kismet/KismetMathLibrary.h"
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
UGoToTimeObject::UGoToTimeObject()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UGoToTimeObject::GoToTime(UObject* WorldContextObject, float TimeToGoTo,bool bRetainPauseState)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
// clamp time just in case
|
||||||
|
const float ClampedTime = UKismetMathLibrary::FClamp(TimeToGoTo,0.0f,UReplaySystemBPLibrary::GetReplayLength(WorldContextObject));
|
||||||
|
|
||||||
|
if (UDemoNetDriver* DemoDriver = UReplaySystemBPLibrary::GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
if (DemoDriver && DemoDriver->ServerConnection && DemoDriver->ServerConnection->PlayerController && DemoDriver->ServerConnection->PlayerController->PlayerState)
|
||||||
|
{
|
||||||
|
if(const AReplayPlayerController * ReplayPC = Cast<AReplayPlayerController>(DemoDriver->ServerConnection->PlayerController))
|
||||||
|
{
|
||||||
|
if(ReplayPC->bIsSpectating)
|
||||||
|
{
|
||||||
|
if(const AActor* ActorBeingSpectated = Cast<AActor>(ReplayPC->GetViewTarget()))
|
||||||
|
{
|
||||||
|
const FNetworkGUID ActorBeingSpectatedGUID = DemoDriver->GetGUIDForActor(ActorBeingSpectated);
|
||||||
|
DemoDriver->AddNonQueuedGUIDForScrubbing(ActorBeingSpectatedGUID);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(const AActor* ActorPossessed = Cast<AActor>(ReplayPC->GetPawn()))
|
||||||
|
{
|
||||||
|
const FNetworkGUID SpectatorPawnGUID = DemoDriver->GetGUIDForActor(ActorPossessed);
|
||||||
|
DemoDriver->AddNonQueuedGUIDForScrubbing(SpectatorPawnGUID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(const APlayerController * PC = Cast<APlayerController>(DemoDriver->ServerConnection->PlayerController))
|
||||||
|
{
|
||||||
|
if(const AActor* ActorPossessed = Cast<AActor>(PC->GetPawn()))
|
||||||
|
{
|
||||||
|
const FNetworkGUID SpectatorPawnGUID = DemoDriver->GetGUIDForActor(ActorPossessed);
|
||||||
|
DemoDriver->AddNonQueuedGUIDForScrubbing(SpectatorPawnGUID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( FActorIterator It( World->GetWorld()); It; ++It )
|
||||||
|
{
|
||||||
|
if ( It->bAlwaysRelevant )
|
||||||
|
{
|
||||||
|
const FNetworkGUID ActorGUID = DemoDriver->GetGUIDForActor(*It);
|
||||||
|
DemoDriver->AddNonQueuedGUIDForScrubbing(ActorGUID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bRetainPauseStateBeforeMove = bRetainPauseState;
|
||||||
|
WCO = WorldContextObject;
|
||||||
|
|
||||||
|
if(WorldSettings->GetPauserPlayerState())
|
||||||
|
{
|
||||||
|
bPauseStateBeforeMove = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
OnGoToTimeDelegate = FOnGotoTimeDelegate::CreateUObject(this,&UGoToTimeObject::OnGoToTimeProcessed);
|
||||||
|
|
||||||
|
DemoDriver->GotoTimeInSeconds(ClampedTime,OnGoToTimeDelegate);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UGoToTimeObject::OnGoToTimeProcessed(bool bWasSuccessful)
|
||||||
|
{
|
||||||
|
const UObject* WorldContext = WCO;
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContext))
|
||||||
|
{
|
||||||
|
if (AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
if (UDemoNetDriver* DemoDriver = UReplaySystemBPLibrary::GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
if(OnGotoTimeComplete.IsBound())
|
||||||
|
{
|
||||||
|
OnGotoTimeComplete.Broadcast(bWasSuccessful);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bRetainPauseStateBeforeMove && !bPauseStateBeforeMove == false)
|
||||||
|
{
|
||||||
|
UReplaySystemBPLibrary::PausePlayback(WCO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( AReplayPlayerController* ReplayPC = Cast<AReplayPlayerController>(UGameplayStatics::GetPlayerController(World,0)))
|
||||||
|
{
|
||||||
|
ReplayPC->OnGoToTime(UReplaySystemBPLibrary::GetCurrentReplayTime(WCO));
|
||||||
|
ReplayPC->OnStopSpectateActor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "ModifyReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
|
||||||
|
|
||||||
|
void UModifyReplayObject::RenameReplay(const FString& ReplayName, const FString& NewName, const int32 UserIndex,bool bIsNormalName)
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
OnRenameReplayCompleteDel = FRenameReplayCallback::CreateUObject(this, &UModifyReplayObject::OnRenameReplayComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
if (bIsNormalName)
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->RenameReplay(ReplayName,NewName,UserIndex, OnRenameReplayCompleteDel);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->RenameReplayFriendlyName(ReplayName, NewName,UserIndex, OnRenameReplayCompleteDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UModifyReplayObject::OnRenameReplayComplete(const FRenameReplayResult& Result)
|
||||||
|
{
|
||||||
|
bool WasSuccessful = Result.WasSuccessful();
|
||||||
|
//OnRenameComplete.Broadcast(WasSuccessful);
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "RenameReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
|
||||||
|
|
||||||
|
void URenameReplayObject::RenameReplay(const FString& ReplayName, const FString& NewName, const int32 UserIndex,bool bIsNormalName)
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
OnRenameReplayCompleteDel = FRenameReplayCallback::CreateUObject(this, &URenameReplayObject::OnRenameReplayComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
if (bIsNormalName)
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->RenameReplay(ReplayName,NewName,UserIndex, OnRenameReplayCompleteDel);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->RenameReplayFriendlyName(ReplayName, NewName,UserIndex, OnRenameReplayCompleteDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void URenameReplayObject::OnRenameReplayComplete(const FRenameReplayResult& Result)
|
||||||
|
{
|
||||||
|
bool WasSuccessful = Result.WasSuccessful();
|
||||||
|
OnRenameComplete.Broadcast(WasSuccessful);
|
||||||
|
}
|
||||||
@@ -0,0 +1,984 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "ReplayDataObject.h"
|
||||||
|
#include "Kismet/KismetStringLibrary.h"
|
||||||
|
#include "HAL/FileManagerGeneric.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "Kismet/KismetTextLibrary.h"
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddBooleanData(FString Name,bool Data)
|
||||||
|
{
|
||||||
|
FReplayBoolData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesBooleanDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
boolData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
boolData.Add(StructVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddByteData(FString Name,TArray<uint8> Data)
|
||||||
|
{
|
||||||
|
FReplayByteData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesByteDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
byteData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byteData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddIntegerData(FString Name,int Data)
|
||||||
|
{
|
||||||
|
FReplayIntData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
|
||||||
|
if(const int Index = DoesIntegerDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
intData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
intData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddInteger64Data(FString Name,int64 Data)
|
||||||
|
{
|
||||||
|
FReplayInt64Data StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesInteger64DataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
int64Data[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int64Data.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddFloatData(FString Name,float Data)
|
||||||
|
{
|
||||||
|
FReplayFloatData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesFloatDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
floatData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
floatData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddNameData(FString Name,FName Data)
|
||||||
|
{
|
||||||
|
FReplayNameData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesNameDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
nameData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nameData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddStringData(FString Name,FString Data)
|
||||||
|
{
|
||||||
|
FReplayStringData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesStringDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
stringData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stringData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddTextData(FString Name,FText Data)
|
||||||
|
{
|
||||||
|
FReplayTextData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesTextDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
textData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddVectorData(FString Name,FVector Data)
|
||||||
|
{
|
||||||
|
FReplayVectorData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesVectorDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
vectorData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vectorData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddRotatorData(FString Name,FRotator Data)
|
||||||
|
{
|
||||||
|
FReplayRotatorData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesRotatorDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
rotatorData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rotatorData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::AddTransformData(FString Name,FTransform Data)
|
||||||
|
{
|
||||||
|
FReplayTransformData StructVar;
|
||||||
|
StructVar.Name = Name;
|
||||||
|
StructVar.Value = Data;
|
||||||
|
|
||||||
|
if(const int Index = DoesTransformDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
transformData[Index] = StructVar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
transformData.Add(StructVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesBooleanDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < boolData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (boolData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesByteDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < byteData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (byteData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesIntegerDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < intData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (intData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesInteger64DataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < int64Data.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (int64Data[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesFloatDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < floatData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (floatData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesNameDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < nameData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (nameData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesStringDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < stringData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (stringData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesTextDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < textData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (textData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesVectorDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < vectorData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (vectorData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesRotatorDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < stringData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (stringData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::DoesTransformDataExist (FString Name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < transformData.Num(); ++i)
|
||||||
|
{
|
||||||
|
if (transformData[i].Name == Name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveBooleanData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesBooleanDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
boolData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveByteData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesByteDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
byteData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveIntegerData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesIntegerDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
intData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveInteger64Data(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesInteger64DataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
int64Data.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveFloatData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesFloatDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
floatData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveNameData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesNameDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
nameData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveStringData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesStringDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
stringData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveTextData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesTextDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
textData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveVectorData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesVectorDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
vectorData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveRotatorData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesRotatorDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
rotatorData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UReplayDataObject::RemoveTransformData(FString Name)
|
||||||
|
{
|
||||||
|
if (const int Index = DoesTransformDataExist(Name) != -1)
|
||||||
|
{
|
||||||
|
transformData.RemoveAt(Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplayDataObject::GetBooleanData(FString Name)
|
||||||
|
{
|
||||||
|
bool bReturnValue = false;
|
||||||
|
|
||||||
|
for (FReplayBoolData Data : boolData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TArray<uint8> UReplayDataObject::GetByteData(FString Name)
|
||||||
|
{
|
||||||
|
TArray<uint8> ReturnValue;
|
||||||
|
|
||||||
|
for (FReplayByteData Data : byteData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UReplayDataObject::GetIntegerData(FString Name)
|
||||||
|
{
|
||||||
|
int ReturnValue = 0;
|
||||||
|
|
||||||
|
for (FReplayIntData Data : intData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int64 UReplayDataObject::GetInteger64Data(FString Name)
|
||||||
|
{
|
||||||
|
int64 ReturnValue = 0;
|
||||||
|
|
||||||
|
for (FReplayInt64Data Data : int64Data)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float UReplayDataObject::GetFloatData(FString Name)
|
||||||
|
{
|
||||||
|
float ReturnValue = 0.0;
|
||||||
|
|
||||||
|
for (FReplayFloatData Data : floatData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FName UReplayDataObject::GetNameData(FString Name)
|
||||||
|
{
|
||||||
|
FName ReturnValue = "";
|
||||||
|
|
||||||
|
for (FReplayNameData Data : nameData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FString UReplayDataObject::GetStringData(FString Name)
|
||||||
|
{
|
||||||
|
FString ReturnValue = "";
|
||||||
|
|
||||||
|
for (FReplayStringData Data : stringData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FText UReplayDataObject::GetTextData(FString Name)
|
||||||
|
{
|
||||||
|
FText ReturnValue;
|
||||||
|
|
||||||
|
for (FReplayTextData Data : textData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FVector UReplayDataObject::GetVectorData(FString Name)
|
||||||
|
{
|
||||||
|
FVector ReturnValue = FVector();
|
||||||
|
|
||||||
|
for (FReplayVectorData Data : vectorData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FRotator UReplayDataObject::GetRotatorData(FString Name)
|
||||||
|
{
|
||||||
|
FRotator ReturnValue = FRotator();
|
||||||
|
|
||||||
|
for (FReplayRotatorData Data : rotatorData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FTransform UReplayDataObject::GetTransformData(FString Name)
|
||||||
|
{
|
||||||
|
FTransform ReturnValue = FTransform();
|
||||||
|
|
||||||
|
for (FReplayTransformData Data : transformData)
|
||||||
|
{
|
||||||
|
if (Data.Name == Name)
|
||||||
|
{
|
||||||
|
return Data.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FString UReplayDataObject::SaveReplayMetaDataToString()
|
||||||
|
{
|
||||||
|
//First Write all structs into strings
|
||||||
|
|
||||||
|
TArray<FString> BoolArray;
|
||||||
|
|
||||||
|
for (FReplayBoolData Data : boolData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_BoolToString(Data.Value);
|
||||||
|
|
||||||
|
BoolArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TArray<FString> ByteArray;
|
||||||
|
|
||||||
|
for (FReplayByteData Data : byteData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue;
|
||||||
|
|
||||||
|
FUTF8ToTCHAR Src = FUTF8ToTCHAR((const ANSICHAR*) (Data.Value.GetData() + 0), Data.Value.Num());
|
||||||
|
DataValue.AppendChars(Src.Get(), Src.Length());
|
||||||
|
|
||||||
|
ByteArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TArray<FString> IntArray;
|
||||||
|
|
||||||
|
for (FReplayIntData Data : intData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_IntToString(Data.Value);
|
||||||
|
|
||||||
|
IntArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> Int64Array;
|
||||||
|
|
||||||
|
for (FReplayInt64Data Data : int64Data)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_IntToString(Data.Value);
|
||||||
|
|
||||||
|
Int64Array.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> FloatArray;
|
||||||
|
|
||||||
|
for (FReplayFloatData Data : floatData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
|
||||||
|
#if ENGINE_MAJOR_VERSION <= 4
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_FloatToString(Data.Value);
|
||||||
|
#else
|
||||||
|
FString DataValue = FString::SanitizeFloat(Data.Value);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
FloatArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> NameArray;
|
||||||
|
|
||||||
|
for (FReplayNameData Data : nameData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_NameToString(Data.Value);
|
||||||
|
|
||||||
|
NameArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> StringArray;
|
||||||
|
|
||||||
|
for (FReplayStringData Data : stringData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = Data.Value;
|
||||||
|
|
||||||
|
StringArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> TextArray;
|
||||||
|
|
||||||
|
for (FReplayTextData Data : textData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetTextLibrary::Conv_TextToString(Data.Value);
|
||||||
|
|
||||||
|
TextArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> VectorArray;
|
||||||
|
|
||||||
|
for (FReplayVectorData Data : vectorData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_VectorToString(Data.Value);
|
||||||
|
|
||||||
|
VectorArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> RotatorArray;
|
||||||
|
|
||||||
|
for (FReplayRotatorData Data : rotatorData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataValue = UKismetStringLibrary::Conv_RotatorToString(Data.Value);
|
||||||
|
|
||||||
|
RotatorArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<FString> TransformArray;
|
||||||
|
|
||||||
|
for (FReplayTransformData Data : transformData)
|
||||||
|
{
|
||||||
|
FString DataName = Data.Name;
|
||||||
|
FString DataVectorPart = UKismetStringLibrary::Conv_VectorToString(Data.Value.GetLocation());
|
||||||
|
FString DataRotatorPart = UKismetStringLibrary::Conv_RotatorToString(Data.Value.GetRotation().Rotator());
|
||||||
|
FString DataScalePart = UKismetStringLibrary::Conv_VectorToString(Data.Value.GetScale3D());
|
||||||
|
|
||||||
|
TArray<FString> DataValues;
|
||||||
|
DataValues.Add(DataVectorPart);
|
||||||
|
DataValues.Add(DataRotatorPart);
|
||||||
|
DataValues.Add(DataScalePart);
|
||||||
|
|
||||||
|
FString DataValue = UKismetStringLibrary::JoinStringArray(DataValues,transformDataSeperator);
|
||||||
|
|
||||||
|
TransformArray.Add(DataName + DataValuesSeperator + DataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FString BoolArrayAsSingleString = UKismetStringLibrary::JoinStringArray(BoolArray, DataArraySeperator);
|
||||||
|
FString ByteArrayAsSingleString = UKismetStringLibrary::JoinStringArray(ByteArray, DataArraySeperator);
|
||||||
|
FString IntArrayAsSingleString = UKismetStringLibrary::JoinStringArray(IntArray, DataArraySeperator);
|
||||||
|
FString Int64ArrayAsSingleString = UKismetStringLibrary::JoinStringArray(Int64Array, DataArraySeperator);
|
||||||
|
FString FloatArrayAsSingleString = UKismetStringLibrary::JoinStringArray(FloatArray, DataArraySeperator);
|
||||||
|
FString NameArrayAsSingleString = UKismetStringLibrary::JoinStringArray(NameArray, DataArraySeperator);
|
||||||
|
FString StringArrayAsSingleString = UKismetStringLibrary::JoinStringArray(StringArray, DataArraySeperator);
|
||||||
|
FString TextArrayAsSingleString = UKismetStringLibrary::JoinStringArray(TextArray, DataArraySeperator);
|
||||||
|
FString VectorArrayAsSingleString = UKismetStringLibrary::JoinStringArray(VectorArray, DataArraySeperator);
|
||||||
|
FString RotatorArrayAsSingleString = UKismetStringLibrary::JoinStringArray(RotatorArray, DataArraySeperator);
|
||||||
|
FString TransformArrayAsSingleString = UKismetStringLibrary::JoinStringArray(TransformArray, DataArraySeperator);
|
||||||
|
|
||||||
|
TArray<FString> FinalStringArray;
|
||||||
|
FinalStringArray.Add(boolDataIdentifier + DataIdentifierSeperator + BoolArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(byteDataIdentifier + DataIdentifierSeperator + ByteArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(intDataIdentifier + DataIdentifierSeperator + IntArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(int64DataIdentifier + DataIdentifierSeperator + Int64ArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(floatDataIdentifier + DataIdentifierSeperator + FloatArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(nameDataIdentifier + DataIdentifierSeperator + NameArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(stringDataIdentifier + DataIdentifierSeperator + StringArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(textDataIdentifier + DataIdentifierSeperator + TextArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(vectorDataIdentifier + DataIdentifierSeperator + VectorArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(rotatorDataIdentifier + DataIdentifierSeperator + RotatorArrayAsSingleString);
|
||||||
|
FinalStringArray.Add(transformDataIdentifier + DataIdentifierSeperator + TransformArrayAsSingleString);
|
||||||
|
|
||||||
|
FString FinalString = UKismetStringLibrary::JoinStringArray(FinalStringArray, FinalArraySeperator);
|
||||||
|
|
||||||
|
return FinalString;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplayDataObject::LoadReplayMetaDataFromString(FString StringDataToParse)
|
||||||
|
{
|
||||||
|
boolData.Empty();
|
||||||
|
byteData.Empty();
|
||||||
|
intData.Empty();
|
||||||
|
int64Data.Empty();
|
||||||
|
floatData.Empty();
|
||||||
|
nameData.Empty();
|
||||||
|
stringData.Empty();
|
||||||
|
textData.Empty();
|
||||||
|
vectorData.Empty();
|
||||||
|
rotatorData.Empty();
|
||||||
|
transformData.Empty();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TArray<FString> LoadedStringArray = UKismetStringLibrary::ParseIntoArray(StringDataToParse, FinalArraySeperator);
|
||||||
|
|
||||||
|
for (FString Field : LoadedStringArray)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
FString DataIdentifier;
|
||||||
|
FString DataPart;
|
||||||
|
|
||||||
|
UKismetStringLibrary::Split(Field,DataIdentifierSeperator,DataIdentifier,DataPart);
|
||||||
|
|
||||||
|
TArray<FString> DataArray = UKismetStringLibrary::ParseIntoArray(DataPart,DataArraySeperator);
|
||||||
|
|
||||||
|
for (FString DataItem : DataArray)
|
||||||
|
{
|
||||||
|
if (DataIdentifier == boolDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayBoolData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
if(Value == "true")
|
||||||
|
{
|
||||||
|
LoadedData.Value = true;
|
||||||
|
}
|
||||||
|
AddBooleanData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == byteDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayByteData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
TArray<uint8> ByteArray;
|
||||||
|
|
||||||
|
if(!(Value.Len() <= 0))
|
||||||
|
{
|
||||||
|
FTCHARToUTF8 Src = FTCHARToUTF8(Value.GetCharArray().GetData());
|
||||||
|
ByteArray.Append((uint8*) Src.Get(), Src.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadedData.Value = ByteArray;
|
||||||
|
AddByteData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == intDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayIntData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
LoadedData.Value = UKismetStringLibrary::Conv_StringToInt(Value);
|
||||||
|
|
||||||
|
AddIntegerData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == int64DataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayInt64Data LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
LoadedData.Value = UKismetStringLibrary::Conv_StringToInt(Value);
|
||||||
|
|
||||||
|
AddInteger64Data(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == floatDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayFloatData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
|
||||||
|
#if ENGINE_MAJOR_VERSION <= 4
|
||||||
|
LoadedData.Value = UKismetStringLibrary::Conv_StringToFloat(Value);
|
||||||
|
#else
|
||||||
|
LexFromString(LoadedData.Value,*Value);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
AddFloatData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == nameDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayNameData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
LoadedData.Value = UKismetStringLibrary::Conv_StringToName(Value);
|
||||||
|
|
||||||
|
AddNameData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == stringDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayStringData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
LoadedData.Value = Value;
|
||||||
|
|
||||||
|
AddStringData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == textDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayTextData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
LoadedData.Value = UKismetTextLibrary::Conv_StringToText(Value);
|
||||||
|
|
||||||
|
AddTextData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == vectorDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayVectorData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
FVector ConvertedValue;
|
||||||
|
bool bWasSuccessful;
|
||||||
|
UKismetStringLibrary::Conv_StringToVector(Value,ConvertedValue,bWasSuccessful);
|
||||||
|
LoadedData.Value = ConvertedValue;
|
||||||
|
|
||||||
|
AddVectorData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == rotatorDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayRotatorData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
FRotator ConvertedValue;
|
||||||
|
bool bWasSuccessful;
|
||||||
|
UKismetStringLibrary::Conv_StringToRotator(Value,ConvertedValue,bWasSuccessful);
|
||||||
|
LoadedData.Value = ConvertedValue;
|
||||||
|
|
||||||
|
AddRotatorData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataIdentifier == transformDataIdentifier)
|
||||||
|
{
|
||||||
|
FReplayTransformData LoadedData;
|
||||||
|
FString Name;
|
||||||
|
FString Value;
|
||||||
|
UKismetStringLibrary::Split(DataItem,DataValuesSeperator,Name, Value);
|
||||||
|
LoadedData.Name = Name;
|
||||||
|
|
||||||
|
TArray<FString> DataComponents = UKismetStringLibrary::ParseIntoArray(Value,transformDataSeperator);
|
||||||
|
|
||||||
|
FVector ConvertedVectorValue;
|
||||||
|
bool bWasSuccessful;
|
||||||
|
UKismetStringLibrary::Conv_StringToVector(DataComponents[0],ConvertedVectorValue,bWasSuccessful);
|
||||||
|
|
||||||
|
FRotator ConvertedRotatorValue;
|
||||||
|
UKismetStringLibrary::Conv_StringToRotator(DataComponents[1],ConvertedRotatorValue,bWasSuccessful);
|
||||||
|
|
||||||
|
FVector ConvertedScaleValue;
|
||||||
|
UKismetStringLibrary::Conv_StringToVector(DataComponents[2],ConvertedScaleValue,bWasSuccessful);
|
||||||
|
LoadedData.Value = FTransform(ConvertedRotatorValue,ConvertedVectorValue,ConvertedScaleValue);
|
||||||
|
|
||||||
|
AddTransformData(LoadedData.Name,LoadedData.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "ReplayObject.h"
|
||||||
|
#include "ReplayDataObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "HAL/FileManagerGeneric.h"
|
||||||
|
#include "Engine/DemoNetDriver.h"
|
||||||
|
|
||||||
|
void UReplayObject::RequestEvents(FString Group,int UserIndex)
|
||||||
|
{
|
||||||
|
const TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
EnumerateEventsDel = FEnumerateEventsCallback::CreateUObject(this, &UReplayObject::OnEnumerateEventsComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->EnumerateEvents(ReplayInfo.ActualName,Group,UserIndex, EnumerateEventsDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplayObject::OnEnumerateEventsComplete(const FEnumerateEventsResult& Results)
|
||||||
|
{
|
||||||
|
TArray<FReplayEvent> ReplayEvents;
|
||||||
|
if(Results.WasSuccessful())
|
||||||
|
{
|
||||||
|
for(FReplayEventListItem EventItem : Results.ReplayEventList.ReplayEvents)
|
||||||
|
{
|
||||||
|
FReplayEvent ReplayEventTemp;
|
||||||
|
ReplayEventTemp.EventID = EventItem.ID;
|
||||||
|
|
||||||
|
ReplayEventTemp.Group = EventItem.Group;
|
||||||
|
ReplayEventTemp.TimeInMs = (int32)EventItem.Time1;
|
||||||
|
|
||||||
|
UReplayDataObject* DataObject = NewObject<UReplayDataObject>();
|
||||||
|
DataObject->LoadReplayMetaDataFromString(EventItem.Metadata);
|
||||||
|
ReplayEventTemp.Data = DataObject;
|
||||||
|
|
||||||
|
ReplayEvents.Add(ReplayEventTemp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnRequestEventsComplete.Broadcast(ReplayEvents);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "ReplayPlayerController.h"
|
||||||
|
|
||||||
|
AReplayPlayerController::AReplayPlayerController()
|
||||||
|
{
|
||||||
|
bShouldPerformFullTickWhenPaused = true;
|
||||||
|
SetTickableWhenPaused(true);
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "ReplaySystem.h"
|
||||||
|
|
||||||
|
DEFINE_LOG_CATEGORY(LogReplaySystem);
|
||||||
|
|
||||||
|
#define LOCTEXT_NAMESPACE "FReplaySystemModule"
|
||||||
|
|
||||||
|
void FReplaySystemModule::StartupModule()
|
||||||
|
{
|
||||||
|
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void FReplaySystemModule::ShutdownModule()
|
||||||
|
{
|
||||||
|
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
||||||
|
// we call this function before unloading the module.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef LOCTEXT_NAMESPACE
|
||||||
|
|
||||||
|
IMPLEMENT_MODULE(FReplaySystemModule, ReplaySystem)
|
||||||
@@ -0,0 +1,490 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "ReplaySystemBPLibrary.h"
|
||||||
|
#include "Engine/World.h"
|
||||||
|
#include "GameFramework/WorldSettings.h"
|
||||||
|
#include "Engine/DemoNetDriver.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "Engine/GameInstance.h"
|
||||||
|
#include "Engine/Engine.h"
|
||||||
|
#include "DeleteReplayObject.h"
|
||||||
|
#include "GetSavedReplaysObject.h"
|
||||||
|
#include "GoToTimeObject.h"
|
||||||
|
#include "RenameReplayObject.h"
|
||||||
|
#include "ReplayDataObject.h"
|
||||||
|
#include "ReplayPlayerController.h"
|
||||||
|
#include "Containers/UnrealString.h"
|
||||||
|
#include "RequestEventsObject.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
#include "Kismet/KismetMathLibrary.h"
|
||||||
|
|
||||||
|
|
||||||
|
UReplaySystemBPLibrary::UReplaySystemBPLibrary(const FObjectInitializer& ObjectInitializer)
|
||||||
|
: Super(ObjectInitializer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::SetReplaySavePath(UObject* WorldContextObject, const FString& Path)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().
|
||||||
|
CreateReplayStreamer())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr->SetDemoPath(Path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FString UReplaySystemBPLibrary::GetReplaySavePath(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
FString Path = "";
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().
|
||||||
|
CreateReplayStreamer())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr->GetDemoPath(Path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Path;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::RecordReplay(UObject* WorldContextObject, const FString& ReplayName,
|
||||||
|
const FString& ReplayFriendlyName)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGameInstance* GI = Cast<UGameInstance>(World->GetGameInstance()))
|
||||||
|
{
|
||||||
|
const TArray<FString> Options;
|
||||||
|
|
||||||
|
GI->StartRecordingReplay(ReplayName, ReplayFriendlyName, Options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::StopRecordingReplay(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (IsRecordingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGameInstance* GI = Cast<UGameInstance>(World->GetGameInstance()))
|
||||||
|
{
|
||||||
|
GI->StopRecordingReplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplaySystemBPLibrary::IsRecordingReplay(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (World != nullptr && GetDemoDriver(World) != nullptr)
|
||||||
|
{
|
||||||
|
return GetDemoDriver(World)->IsRecording();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
UDeleteReplayObject* UReplaySystemBPLibrary::DeleteReplay(UObject* WorldContextObject, const FString& ReplayName)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UDeleteReplayObject* ReplayDeleteObj = NewObject<UDeleteReplayObject>())
|
||||||
|
{
|
||||||
|
ReplayDeleteObj->DeleteReplay(ReplayName);
|
||||||
|
return ReplayDeleteObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
URenameReplayObject* UReplaySystemBPLibrary::RenameReplay(UObject* WorldContextObject, const FString& ReplayName,
|
||||||
|
const FString& NewReplayName, const int32 UserIndex)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (URenameReplayObject* ReplayRenameObj = NewObject<URenameReplayObject>())
|
||||||
|
{
|
||||||
|
ReplayRenameObj->RenameReplay(ReplayName, NewReplayName, UserIndex, true);
|
||||||
|
return ReplayRenameObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
URenameReplayObject* UReplaySystemBPLibrary::RenameReplayFriendly(UObject* WorldContextObject,
|
||||||
|
const FString& ReplayName,
|
||||||
|
const FString& NewFriendlyReplayName,
|
||||||
|
const int32 UserIndex)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (URenameReplayObject* ReplayRenameObj = NewObject<URenameReplayObject>())
|
||||||
|
{
|
||||||
|
ReplayRenameObj->RenameReplay(ReplayName, NewFriendlyReplayName, UserIndex, false);
|
||||||
|
return ReplayRenameObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UGetSavedReplaysObject* UReplaySystemBPLibrary::GetSavedReplays(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGetSavedReplaysObject* SavedReplaysObj = NewObject<UGetSavedReplaysObject>())
|
||||||
|
{
|
||||||
|
SavedReplaysObj->GetSavedReplays();
|
||||||
|
return SavedReplaysObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplaySystemBPLibrary::PlayRecordedReplay(UObject* WorldContextObject, const FString& ReplayName)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGameInstance* GI = Cast<UGameInstance>(World->GetGameInstance()))
|
||||||
|
{
|
||||||
|
const TArray<FString> Options;
|
||||||
|
|
||||||
|
return GI->PlayReplay(ReplayName, nullptr, Options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
UGoToTimeObject* UReplaySystemBPLibrary::RestartReplayPlayback(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
UGoToTimeObject* GoToTimeObject = NewObject<UGoToTimeObject>();
|
||||||
|
if (!GoToTimeObject)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GoToTimeObject->GoToTime(WorldContextObject, 0.0f, false);
|
||||||
|
|
||||||
|
return GoToTimeObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
UGoToTimeObject* UReplaySystemBPLibrary::GoToSpecificTime(UObject* WorldContextObject, float TimeToGoTo,
|
||||||
|
bool bRetainCurrentPauseState)
|
||||||
|
{
|
||||||
|
UGoToTimeObject* GoToTimeObject = NewObject<UGoToTimeObject>();
|
||||||
|
if (!GoToTimeObject)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GoToTimeObject->GoToTime(WorldContextObject, TimeToGoTo, bRetainCurrentPauseState);
|
||||||
|
|
||||||
|
return GoToTimeObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::PausePlayback(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
if (const UDemoNetDriver* DemoDriver = GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
if (DemoDriver && DemoDriver->ServerConnection && DemoDriver->ServerConnection->PlayerController && DemoDriver->ServerConnection->PlayerController->PlayerState)
|
||||||
|
{
|
||||||
|
World->bIsCameraMoveableWhenPaused = true;
|
||||||
|
WorldSettings->SetPauserPlayerState(DemoDriver->ServerConnection->PlayerController->PlayerState);
|
||||||
|
if (AReplayPlayerController* ReplayPC = Cast<AReplayPlayerController>(
|
||||||
|
UGameplayStatics::GetPlayerController(World, 0)))
|
||||||
|
{
|
||||||
|
ReplayPC->OnTogglePause(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::ResumePlayback(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
WorldSettings->SetPauserPlayerState(nullptr);
|
||||||
|
if (AReplayPlayerController* ReplayPC = Cast<AReplayPlayerController>(
|
||||||
|
UGameplayStatics::GetPlayerController(World, 0)))
|
||||||
|
{
|
||||||
|
ReplayPC->OnTogglePause(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::SetPlaybackSpeed(UObject* WorldContextObject, float Speed)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
WorldSettings->DemoPlayTimeDilation = Speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float UReplaySystemBPLibrary::GetPlaybackSpeed(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
return WorldSettings->DemoPlayTimeDilation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float UReplaySystemBPLibrary::GetCurrentReplayTime(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const UDemoNetDriver* DemoDriver = GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
return DemoDriver->GetDemoCurrentTime();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float UReplaySystemBPLibrary::GetReplayLength(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const UDemoNetDriver* DemoDriver = GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
if (IsRecordingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
return DemoDriver->AccumulatedRecordTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsPlayingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
return DemoDriver->GetDemoTotalTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplaySystemBPLibrary::IsPlayingReplay(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const UDemoNetDriver* DemoDriver = GetDemoDriver(World))
|
||||||
|
{
|
||||||
|
return DemoDriver->IsPlaying();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplaySystemBPLibrary::IsReplayPlaybackPaused(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (IsPlayingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (const AWorldSettings* WorldSettings = World->GetWorldSettings())
|
||||||
|
{
|
||||||
|
return WorldSettings->GetPauserPlayerState() != nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
FString UReplaySystemBPLibrary::GetActiveReplayName(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (World != nullptr && GetDemoDriver(World) != nullptr)
|
||||||
|
{
|
||||||
|
return GetDemoDriver(World)->GetActiveReplayName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "None";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UReplaySystemBPLibrary::AddEventToActiveReplay(UObject* WorldContextObject, const FString& EventName,
|
||||||
|
const FString& Group, UReplayDataObject* DataObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (IsRecordingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (World != nullptr && GetDemoDriver(World) != nullptr)
|
||||||
|
{
|
||||||
|
FString EmptyString = "";
|
||||||
|
const TArray<uint8> Data;
|
||||||
|
if (DataObject)
|
||||||
|
{
|
||||||
|
FString ReplayDataString = DataObject->SaveReplayMetaDataToString();
|
||||||
|
EmptyString = ReplayDataString;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetDemoDriver(World)->AddOrUpdateEvent(EventName, Group, EmptyString, Data);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
URequestEventsObject* UReplaySystemBPLibrary::RequestActiveReplayEvents(UObject* WorldContextObject, FString Group,
|
||||||
|
int UserIndex)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (!IsRecordingReplay(WorldContextObject) && IsPlayingReplay(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (URequestEventsObject* RequestEventsObject = NewObject<URequestEventsObject>())
|
||||||
|
{
|
||||||
|
RequestEventsObject->RequestEvents(GetActiveReplayName(WorldContextObject), Group, UserIndex);
|
||||||
|
return RequestEventsObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UReplayDataObject* UReplaySystemBPLibrary::CreateReplayDataObject()
|
||||||
|
{
|
||||||
|
UReplayDataObject* DataObject = NewObject<UReplayDataObject>();
|
||||||
|
return DataObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
float UReplaySystemBPLibrary::MsToSeconds(const int32 MS)
|
||||||
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION <= 4
|
||||||
|
const float MsAsFloat = UKismetMathLibrary::Conv_IntToFloat(MS);
|
||||||
|
#else
|
||||||
|
const float MsAsFloat = UKismetMathLibrary::Conv_IntToDouble(MS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const float MsAsSeconds = MsAsFloat / 1000;
|
||||||
|
return MsAsSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::SpectateActor(UObject* WorldContextObject, AActor* Actor, FBlendSettings BlendSettings)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (!Actor)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (UGameplayStatics::GetPlayerController(World, 0))
|
||||||
|
{
|
||||||
|
if (APlayerController* PC = UGameplayStatics::GetPlayerController(World, 0))
|
||||||
|
{
|
||||||
|
if (!PC->IsLocalController())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Everything from here is happening only locally/on the client
|
||||||
|
PC->SetViewTargetWithBlend(Actor, BlendSettings.BlendTime, BlendSettings.BlendFunction,
|
||||||
|
BlendSettings.BlendExponent, BlendSettings.bLockOutgoing);
|
||||||
|
if (AReplayPlayerController* ReplayPC = Cast<AReplayPlayerController>(
|
||||||
|
UGameplayStatics::GetPlayerController(World, 0)))
|
||||||
|
{
|
||||||
|
ReplayPC->OnSpectateActor(Actor);
|
||||||
|
ReplayPC->bIsSpectating = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::StopSpectating(UObject* WorldContextObject, FBlendSettings BlendSettings)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGameplayStatics::GetPlayerController(World, 0))
|
||||||
|
{
|
||||||
|
if (APlayerController* PC = UGameplayStatics::GetPlayerController(World, 0))
|
||||||
|
{
|
||||||
|
if (!PC->IsLocalController())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Everything from here is happening only locally/on the client
|
||||||
|
|
||||||
|
PC->SetViewTargetWithBlend(PC->GetPawn(), BlendSettings.BlendTime, BlendSettings.BlendFunction,
|
||||||
|
BlendSettings.BlendExponent, BlendSettings.bLockOutgoing);
|
||||||
|
|
||||||
|
if (AReplayPlayerController* ReplayPC = Cast<AReplayPlayerController>(
|
||||||
|
UGameplayStatics::GetPlayerController(World, 0)))
|
||||||
|
{
|
||||||
|
ReplayPC->OnStopSpectateActor();
|
||||||
|
ReplayPC->bIsSpectating = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UDemoNetDriver* UReplaySystemBPLibrary::GetDemoDriver(const UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION > 4
|
||||||
|
return World->GetDemoNetDriver();
|
||||||
|
#elif ENGINE_MINOR_VERSION >= 26
|
||||||
|
return World->GetDemoNetDriver();
|
||||||
|
#elif ENGINE_MINOR_VERSION < 26
|
||||||
|
return World->DemoNetDriver;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UReplaySystemBPLibrary::SetMaxRecordHz(UObject* WorldContextObject, float Hz)
|
||||||
|
{
|
||||||
|
if (const UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject))
|
||||||
|
{
|
||||||
|
if (UGameplayStatics::GetPlayerController(World, 0))
|
||||||
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION <= 4
|
||||||
|
FString Command = "demo.recordhz " + UKismetStringLibrary::Conv_FloatToString(Hz);
|
||||||
|
#else
|
||||||
|
FString Command = "demo.recordhz " + FString::SanitizeFloat(Hz);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
UGameplayStatics::GetPlayerController(World, 0)->ConsoleCommand(Command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float UReplaySystemBPLibrary::GetMaxRecordHz()
|
||||||
|
{
|
||||||
|
static const auto CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("demo.recordhz"));
|
||||||
|
const float value = CVar->GetFloat();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "RequestEventsObject.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDataObject.h"
|
||||||
|
|
||||||
|
|
||||||
|
void URequestEventsObject::RequestEvents(FString ReplayName,FString Group, int UserIndex)
|
||||||
|
{
|
||||||
|
const TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
|
||||||
|
|
||||||
|
EnumerateEventsDel = FEnumerateEventsCallback::CreateUObject(this, &URequestEventsObject::OnEnumerateEventsComplete);
|
||||||
|
|
||||||
|
if (EnumerateStreamsPtr.Get())
|
||||||
|
{
|
||||||
|
EnumerateStreamsPtr.Get()->EnumerateEvents(ReplayName,Group,UserIndex, EnumerateEventsDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void URequestEventsObject::OnEnumerateEventsComplete(const FEnumerateEventsResult& Results)
|
||||||
|
{
|
||||||
|
TArray<FReplayEvent> ReplayEvents;
|
||||||
|
if(Results.WasSuccessful())
|
||||||
|
{
|
||||||
|
for(FReplayEventListItem EventItem : Results.ReplayEventList.ReplayEvents)
|
||||||
|
{
|
||||||
|
FReplayEvent ReplayEventTemp;
|
||||||
|
ReplayEventTemp.EventID = EventItem.ID;
|
||||||
|
|
||||||
|
ReplayEventTemp.Group = EventItem.Group;
|
||||||
|
ReplayEventTemp.TimeInMs = static_cast<int32>(EventItem.Time1);
|
||||||
|
UReplayDataObject* DataObject = NewObject<UReplayDataObject>();
|
||||||
|
DataObject->LoadReplayMetaDataFromString(EventItem.Metadata);
|
||||||
|
ReplayEventTemp.Data = DataObject;
|
||||||
|
|
||||||
|
ReplayEvents.Add(ReplayEventTemp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnRequestEventsComplete.Broadcast(ReplayEvents);
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "DeleteReplayObject.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API UDeleteReplayObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Replay")
|
||||||
|
FOnDeleteComplete OnDeleteComplete;
|
||||||
|
|
||||||
|
void DeleteReplay(const FString& ReplayName);
|
||||||
|
|
||||||
|
|
||||||
|
TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr;
|
||||||
|
|
||||||
|
FDeleteFinishedStreamCallback OnDeleteFinishedStreamCompleteDel;
|
||||||
|
|
||||||
|
void OnDeleteFinishedStreamComplete(const FDeleteFinishedStreamResult& Result);
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "ReplayObject.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "GetSavedReplaysObject.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API UGetSavedReplaysObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Replay")
|
||||||
|
FOnGetReplaysComplete OnGetReplaysComplete;
|
||||||
|
|
||||||
|
void GetSavedReplays();
|
||||||
|
|
||||||
|
TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr;
|
||||||
|
|
||||||
|
FEnumerateStreamsCallback EnumerateStreamsCallbackDel;
|
||||||
|
|
||||||
|
/** Called when we get results from the replay streaming interface */
|
||||||
|
void OnEnumerateStreamsComplete(const FEnumerateStreamsResult& Result);
|
||||||
|
};
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "Engine.h"
|
||||||
|
#include "Engine/DemoNetDriver.h"
|
||||||
|
#include "GoToTimeObject.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class REPLAYSYSTEM_API UGoToTimeObject : public UObject
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this actor's properties
|
||||||
|
UGoToTimeObject();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable)
|
||||||
|
FOnGotoTimeComplete OnGotoTimeComplete;
|
||||||
|
|
||||||
|
void GoToTime(UObject* WorldContextObject,float TimeToGoTo,bool bRetainPauseState);
|
||||||
|
|
||||||
|
UPROPERTY()
|
||||||
|
UObject* WCO;
|
||||||
|
|
||||||
|
bool bPauseStateBeforeMove = false;
|
||||||
|
|
||||||
|
bool bRetainPauseStateBeforeMove = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FOnGotoTimeDelegate OnGoToTimeDelegate;
|
||||||
|
|
||||||
|
void OnGoToTimeProcessed(bool bWasSuccessful);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "ModifyReplayObject.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API UModifyReplayObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//UPROPERTY(BlueprintAssignable, Category = "Replay")
|
||||||
|
//FOnModifyReplayComplete OnRenameComplete;
|
||||||
|
|
||||||
|
void RenameReplay(const FString& ReplayName, const FString& NewName, const int32 UserIndex, bool bIsNormalName);
|
||||||
|
|
||||||
|
|
||||||
|
TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr;
|
||||||
|
|
||||||
|
FRenameReplayCallback OnRenameReplayCompleteDel;
|
||||||
|
|
||||||
|
void OnRenameReplayComplete(const FRenameReplayResult& Result);
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "RenameReplayObject.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API URenameReplayObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Replay")
|
||||||
|
FOnRenameReplayComplete OnRenameComplete;
|
||||||
|
|
||||||
|
void RenameReplay(const FString& ReplayName, const FString& NewName, const int32 UserIndex, bool bIsNormalName);
|
||||||
|
|
||||||
|
|
||||||
|
TSharedPtr<INetworkReplayStreamer> EnumerateStreamsPtr;
|
||||||
|
|
||||||
|
FRenameReplayCallback OnRenameReplayCompleteDel;
|
||||||
|
|
||||||
|
void OnRenameReplayComplete(const FRenameReplayResult& Result);
|
||||||
|
};
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplayDataObject.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API UReplayDataObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
FString DataPlaceHolder = "---PlaceHolderValue---";
|
||||||
|
|
||||||
|
FString DataArraySeperator = "---DataArray---";
|
||||||
|
|
||||||
|
FString DataValuesSeperator = "---DataValue---";
|
||||||
|
|
||||||
|
FString FinalArraySeperator = "---FinalArraySep---";
|
||||||
|
|
||||||
|
FString NewLineReplacer = " ---NewLineRep--- ";
|
||||||
|
|
||||||
|
FString NewLineReplacerR = " ---NEWLINE-R--- ";
|
||||||
|
|
||||||
|
FString boolDataIdentifier = "---BoolI---";
|
||||||
|
|
||||||
|
FString byteDataIdentifier = "---ByteI---";
|
||||||
|
|
||||||
|
FString intDataIdentifier = "---IntI---";
|
||||||
|
|
||||||
|
FString int64DataIdentifier = "---Int64I---";
|
||||||
|
|
||||||
|
FString floatDataIdentifier = "---FloatI---";
|
||||||
|
|
||||||
|
FString nameDataIdentifier = "---NameI---";
|
||||||
|
|
||||||
|
FString stringDataIdentifier = "---StringI---";
|
||||||
|
|
||||||
|
FString textDataIdentifier = "---TextI---";
|
||||||
|
|
||||||
|
FString vectorDataIdentifier = "---VectorI---";
|
||||||
|
|
||||||
|
FString rotatorDataIdentifier = "---RotatorI---";
|
||||||
|
|
||||||
|
FString transformDataIdentifier = "---TransformI---";
|
||||||
|
|
||||||
|
FString DataIdentifierSeperator = "---IdentifierSep---";
|
||||||
|
|
||||||
|
FString transformDataSeperator = "---TransformDataSep---";
|
||||||
|
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayBoolData> boolData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayByteData> byteData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayIntData> intData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayInt64Data> int64Data;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayFloatData> floatData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayNameData> nameData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayStringData> stringData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayTextData> textData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayVectorData> vectorData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayRotatorData> rotatorData;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "DataObject")
|
||||||
|
TArray<FReplayTransformData> transformData;
|
||||||
|
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesBooleanDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesByteDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesIntegerDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesInteger64DataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesFloatDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesNameDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesStringDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesTextDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesVectorDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesRotatorDataExist (FString Name);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "DataObject")
|
||||||
|
int DoesTransformDataExist (FString Name);
|
||||||
|
|
||||||
|
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddBooleanData(FString Name,bool Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddByteData(FString Name,TArray<uint8> Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddIntegerData(FString Name,int Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddInteger64Data(FString Name,int64 Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddFloatData(FString Name,float Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddNameData(FString Name,FName Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddStringData(FString Name,FString Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddTextData(FString Name,FText Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddVectorData(FString Name,FVector Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddRotatorData(FString Name,FRotator Data);
|
||||||
|
// Adds or updates data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void AddTransformData(FString Name,FTransform Data);
|
||||||
|
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveBooleanData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveByteData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveIntegerData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveInteger64Data(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveFloatData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveNameData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveStringData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveTextData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveVectorData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveRotatorData(FString Name);
|
||||||
|
// Removes data of the specified type (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
void RemoveTransformData(FString Name);
|
||||||
|
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
bool GetBooleanData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
TArray<uint8> GetByteData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
int GetIntegerData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
int64 GetInteger64Data(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
float GetFloatData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FName GetNameData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FString GetStringData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FText GetTextData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FVector GetVectorData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FRotator GetRotatorData(FString Name);
|
||||||
|
// Returns the stored value if it exists (Case Sensitive)
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "DataObject")
|
||||||
|
FTransform GetTransformData(FString Name);
|
||||||
|
|
||||||
|
/*Used Internaly to Create/Save meta data for a replay*/
|
||||||
|
UFUNCTION(Category = "DataObject")
|
||||||
|
FString SaveReplayMetaDataToString();
|
||||||
|
|
||||||
|
/*Used Internaly to Load a meta data for a replay*/
|
||||||
|
UFUNCTION(Category = "DataObject")
|
||||||
|
bool LoadReplayMetaDataFromString(FString StringDataToParse);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplayDelegates.generated.h"
|
||||||
|
|
||||||
|
class UReplayObject;
|
||||||
|
class APawn;
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRequestEventsComplete,const TArray<FReplayEvent>&, Events);
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRenameReplayComplete, bool, bWasSuccessful);
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnGetReplaysComplete,const TArray<UReplayObject *> &, Replays);
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnDeleteComplete, bool, bWasSuccessful);
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnGotoTimeComplete, const bool ,bWasSuccessful);
|
||||||
|
|
||||||
|
UDELEGATE()
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnReplayComplete);
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplayObject.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UReplayDataObject;
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API UReplayObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY()
|
||||||
|
UWorld* World = nullptr;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = Replay)
|
||||||
|
FReplayInfo ReplayInfo;
|
||||||
|
|
||||||
|
|
||||||
|
// called once the events have been gotten
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Replay|Events")
|
||||||
|
FOnRequestEventsComplete OnRequestEventsComplete;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the events of a loaded replay
|
||||||
|
* @param Group
|
||||||
|
* @param UserIndex
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Replay")
|
||||||
|
void RequestEvents(FString Group,int UserIndex);
|
||||||
|
|
||||||
|
FEnumerateEventsCallback EnumerateEventsDel;
|
||||||
|
|
||||||
|
void OnEnumerateEventsComplete(const FEnumerateEventsResult& Results);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/PlayerController.h"
|
||||||
|
#include "ReplayPlayerController.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class REPLAYSYSTEM_API AReplayPlayerController : public APlayerController
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
AReplayPlayerController();
|
||||||
|
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintImplementableEvent,Category="Replay")
|
||||||
|
void OnGoToTime(float currentTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* true means paused
|
||||||
|
* @param PauseState
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintImplementableEvent,Category="Replay")
|
||||||
|
void OnTogglePause(bool PauseState);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintImplementableEvent,Category="Replay")
|
||||||
|
void OnSpectateActor(AActor* Actor);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintImplementableEvent,Category="Replay")
|
||||||
|
void OnStopSpectateActor();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool bIsSpectating = false;
|
||||||
|
};
|
||||||
@@ -0,0 +1,371 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Camera/PlayerCameraManager.h"
|
||||||
|
#include "Curves/CurveVector.h"
|
||||||
|
#include "ReplayStructs.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
class UReplayDataObject;
|
||||||
|
class UCurveVector;
|
||||||
|
class FNetworkGUID;
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayInfo
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
//The UI name of the replay
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString FriendlyName;
|
||||||
|
//The actual name of the replay on disk
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString ActualName;
|
||||||
|
//The date the replay was recorded
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FDateTime RecordDate;
|
||||||
|
//The length of the replay in milliseconds
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
int32 LengthInMS = 0;
|
||||||
|
//The size of the replay in Mb
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
float SizeInMb = 0.0f;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FBlendSettings
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
//The time taken to blend
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
float BlendTime = 0.2f;
|
||||||
|
//Cubic, Linear etc functions for blending
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
TEnumAsByte<EViewTargetBlendFunction> BlendFunction = EViewTargetBlendFunction::VTBlend_Linear;
|
||||||
|
///Exponent used by certain blend functions to control the blend
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
float BlendExponent = 0;
|
||||||
|
//If true, lock outgoing view target to last frame's camera position for the remainder of the blend
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
bool bLockOutgoing = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayEvent
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
//The Event ID
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString EventID;
|
||||||
|
//The group this event belongs to
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Group;
|
||||||
|
// The time the event was added at in milliseconds
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
int32 TimeInMs = 0;
|
||||||
|
//The event data
|
||||||
|
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = Replay)
|
||||||
|
UReplayDataObject* Data=nullptr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayBoolData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
bool Value = true;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayBoolData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayBoolData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayByteData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
TArray<uint8> Value;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayByteData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayByteData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayIntData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
int Value=0;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayIntData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayIntData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayInt64Data
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
int64 Value = 0;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayInt64Data& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayInt64Data& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayFloatData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
float Value = 0.0f;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayFloatData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayFloatData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayNameData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FName Value;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayNameData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayNameData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayStringData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Value;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayStringData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayStringData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayTextData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FText Value;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayTextData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayTextData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayVectorData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FVector Value = FVector(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayVectorData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayVectorData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayRotatorData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FRotator Value = FRotator(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayRotatorData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayRotatorData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayTransformData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FTransform Value;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayTransformData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayTransformData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct FReplayObjectData
|
||||||
|
{
|
||||||
|
GENERATED_USTRUCT_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
FString Name;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Replay)
|
||||||
|
UObject* Value=nullptr;
|
||||||
|
|
||||||
|
FORCEINLINE bool operator<(const FReplayObjectData& Other) const
|
||||||
|
{
|
||||||
|
return Name < Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE bool operator==(const FReplayObjectData& Other) const
|
||||||
|
{
|
||||||
|
return Name == Other.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
DECLARE_LOG_CATEGORY_EXTERN(LogReplaySystem, Log, All);
|
||||||
|
|
||||||
|
|
||||||
|
class FReplaySystemModule : public IModuleInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** IModuleInterface implementation */
|
||||||
|
virtual void StartupModule() override;
|
||||||
|
virtual void ShutdownModule() override;
|
||||||
|
};
|
||||||
@@ -0,0 +1,308 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayStructs.h"
|
||||||
|
#include "ReplaySystemBPLibrary.generated.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function library class.
|
||||||
|
* Each function in it is expected to be static and represents blueprint node that can be called in any blueprint.
|
||||||
|
*
|
||||||
|
* When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable.
|
||||||
|
* BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins.
|
||||||
|
* BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins.
|
||||||
|
* DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu.
|
||||||
|
* Its lets you name the node using characters not allowed in C++ function names.
|
||||||
|
* CompactNodeTitle - the word(s) that appear on the node.
|
||||||
|
* Keywords - the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu.
|
||||||
|
* Good example is "Print String" node which you can find also by using keyword "log".
|
||||||
|
* Category - the category your node will be under in the Blueprint drop-down menu.
|
||||||
|
*
|
||||||
|
* For more info on custom blueprint nodes visit documentation:
|
||||||
|
* https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation
|
||||||
|
*/
|
||||||
|
|
||||||
|
class UGoToTimeObject;
|
||||||
|
class UDeleteReplayObject;
|
||||||
|
class UGetSavedReplaysObject;
|
||||||
|
class URenameReplayObject;
|
||||||
|
class UReplayDataObject;
|
||||||
|
class UReplayObject;
|
||||||
|
class URequestEventsObject;
|
||||||
|
class UInstantReplayObject;
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class UReplaySystemBPLibrary : public UBlueprintFunctionLibrary
|
||||||
|
{
|
||||||
|
GENERATED_UCLASS_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path for all replays (Does not copy existing replays over)
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param Path New path
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void SetReplaySavePath(UObject* WorldContextObject, const FString& Path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current path where replays are stored
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return Path
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure,Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static FString GetReplaySavePath(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts recording a replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param ReplayName The name to save the replay as on disk (Used internally)
|
||||||
|
* @param ReplayFriendlyName The Ui friendly name of the replay (Used by you or users)
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Recording", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void RecordReplay(UObject* WorldContextObject, const FString& ReplayName,
|
||||||
|
const FString& ReplayFriendlyName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop recording a replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Recording", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void StopRecordingReplay(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds out if a replay is being recorded
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static bool IsRecordingReplay(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param ReplayName The name the replay is saved as on disk
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static UDeleteReplayObject* DeleteReplay(UObject* WorldContextObject, const FString& ReplayName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the name a replay is saved as on the disk
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param ReplayName The current name on disk of this replay
|
||||||
|
* @param NewReplayName New name to save as on disk
|
||||||
|
* @param UserIndex
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static URenameReplayObject* RenameReplay(UObject* WorldContextObject, const FString& ReplayName, const FString& NewReplayName, const int32 UserIndex);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the friendly name of a replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param ReplayName The current name on disk of this replay
|
||||||
|
* @param NewFriendlyReplayName New friendly to give it
|
||||||
|
* @param UserIndex
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static URenameReplayObject* RenameReplayFriendly(UObject* WorldContextObject, const FString& ReplayName, const FString& NewFriendlyReplayName, const int32 UserIndex);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all the saved replays
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static UGetSavedReplaysObject* GetSavedReplays(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Play a recorded replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param ReplayName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static bool PlayRecordedReplay(UObject* WorldContextObject, const FString& ReplayName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restart the currently playing replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static UGoToTimeObject* RestartReplayPlayback(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Goto a specific time in the replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param TimeToGoTo Time in seconds to goto
|
||||||
|
* @param bRetainCurrentPauseState Use this on a need basis as it can cause some physics issues
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static UGoToTimeObject* GoToSpecificTime(UObject* WorldContextObject, float TimeToGoTo,
|
||||||
|
bool bRetainCurrentPauseState);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pause the replay playback
|
||||||
|
* @param WorldContextObject
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void PausePlayback(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resume the replay playback
|
||||||
|
* @param WorldContextObject
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void ResumePlayback(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the Playback speed of the replay
|
||||||
|
* @param WorldContextObject Set the playback speed of the replay
|
||||||
|
* @param Speed Like time dilation 0.1,1,10
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void SetPlaybackSpeed(UObject* WorldContextObject, float Speed);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the playback speed of the replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static float GetPlaybackSpeed(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current time in seconds of the replay
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static float GetCurrentReplayTime(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total length in seconds of the replay currently playing or being recorded
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ReplaySystem|Playback", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static float GetReplayLength(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns true if a replay is being played
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static bool IsPlayingReplay(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true of the replay has been paused
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static bool IsReplayPlaybackPaused(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name on disk/memory of the replay currently playing or being recorded
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static FString GetActiveReplayName(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds or Updates said event in the replay currently being recorded
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param EventName The name of the event
|
||||||
|
* @param Group The group this event belongs to
|
||||||
|
* @param DataObject optional object containing extra data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static bool AddEventToActiveReplay(UObject* WorldContextObject,const FString& EventName, const FString& Group, UReplayDataObject* DataObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Events of the replay currently playing
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param Group The group name
|
||||||
|
* @param UserIndex
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static URequestEventsObject* RequestActiveReplayEvents(UObject* WorldContextObject,FString Group,int UserIndex);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a data object for storing event meta data for a replay
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "ReplaySystem")
|
||||||
|
static UReplayDataObject* CreateReplayDataObject();
|
||||||
|
|
||||||
|
static UReplayDataObject* LoadEventFromByteData(TArray<uint8> Bytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to convert milliseconds to seconds
|
||||||
|
* @param MS
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,BlueprintPure, Category = "ReplaySystem|Utilities")
|
||||||
|
static float MsToSeconds(const int32 MS);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just sets the view target of the controller to the specified actor
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param Actor The pawn to spectate
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,Category= "ReplaySystem",meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void SpectateActor(UObject* WorldContextObject, AActor* Actor, FBlendSettings BlendSettings);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just sets the view target of the controller back to the possessed pawn
|
||||||
|
* @param WorldContextObject
|
||||||
|
* @param BlendSettings
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,Category= "ReplaySystem",meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void StopSpectating(UObject* WorldContextObject,FBlendSettings BlendSettings);
|
||||||
|
|
||||||
|
UFUNCTION(Category= "ReplaySystem",meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static UDemoNetDriver* GetDemoDriver(const UObject* WorldContextObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Set the maximum number of frames recorded per second by the replay
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,Category= "ReplaySystem",meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
||||||
|
static void SetMaxRecordHz(UObject* WorldContextObject,float Hz = 8.0f);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the maximum number of frames recorded per second by the replay
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable,Category= "ReplaySystem")
|
||||||
|
static float GetMaxRecordHz();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NetworkReplayStreaming.h"
|
||||||
|
#include "ReplayDelegates.h"
|
||||||
|
#include "RequestEventsObject.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UCLASS(BlueprintType, Blueprintable)
|
||||||
|
class REPLAYSYSTEM_API URequestEventsObject : public UObject
|
||||||
|
{
|
||||||
|
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Replay|Events")
|
||||||
|
FOnRequestEventsComplete OnRequestEventsComplete;
|
||||||
|
|
||||||
|
void RequestEvents(FString ReplayName,FString Group,int UserIndex);
|
||||||
|
|
||||||
|
FEnumerateEventsCallback EnumerateEventsDel;
|
||||||
|
|
||||||
|
void OnEnumerateEventsComplete(const FEnumerateEventsResult& Results);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2020-Present Oyintare Ebelo. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
public class ReplaySystem : ModuleRules
|
||||||
|
{
|
||||||
|
public ReplaySystem(ReadOnlyTargetRules Target) : base(Target)
|
||||||
|
{
|
||||||
|
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||||
|
|
||||||
|
PublicIncludePaths.AddRange(
|
||||||
|
new string[] {
|
||||||
|
// ... add public include paths required here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
PrivateIncludePaths.AddRange(
|
||||||
|
new string[] {
|
||||||
|
// ... add other private include paths required here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
PublicDependencyModuleNames.AddRange(
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
"Core",
|
||||||
|
"NetworkReplayStreaming",
|
||||||
|
"Json",
|
||||||
|
"JsonUtilities",
|
||||||
|
// ... add other public dependencies that you statically link with here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
PrivateDependencyModuleNames.AddRange(
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
"CoreUObject",
|
||||||
|
"Engine",
|
||||||
|
"Slate",
|
||||||
|
"SlateCore",
|
||||||
|
// ... add private dependencies that you statically link with here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
DynamicallyLoadedModuleNames.AddRange(
|
||||||
|
new string[] {
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[CrashReportClient]
|
||||||
|
bHideLogFilesOption=false
|
||||||
|
bHideAllowToBeContactedOption=false
|
||||||
|
bIsAllowedToCloseWithoutSending=true
|
||||||
|
bIsAllowedToSendWithoutDetailedInfo=true
|
||||||
|
CrashConfigPurgeDays=2
|
||||||
|
Stall.RecordDump=false
|
||||||
|
Ensure.RecordDump=true
|
||||||
|
|
||||||
943
Saved/Logs/PS_Replay.log
Normal file
943
Saved/Logs/PS_Replay.log
Normal file
@@ -0,0 +1,943 @@
|
|||||||
|
Log file open, 07/02/26 17:26:45
|
||||||
|
LogWindows: Failed to load 'aqProf.dll' (GetLastError=126)
|
||||||
|
LogWindows: File 'aqProf.dll' does not exist
|
||||||
|
LogProfilingDebugging: Loading WinPixEventRuntime.dll for PIX profiling (from ../../../Engine/Binaries/ThirdParty/Windows/WinPixEventRuntime/x64).
|
||||||
|
LogWindows: Failed to load 'VtuneApi.dll' (GetLastError=126)
|
||||||
|
LogWindows: File 'VtuneApi.dll' does not exist
|
||||||
|
LogWindows: Failed to load 'VtuneApi32e.dll' (GetLastError=126)
|
||||||
|
LogWindows: File 'VtuneApi32e.dll' does not exist
|
||||||
|
LogWindows: Started CrashReportClient (pid=38828)
|
||||||
|
LogWindows: Enabling Tpause support
|
||||||
|
LogWindows: Custom abort handler registered for crash reporting.
|
||||||
|
LogInit: Display: Running engine for game: PS_Replay
|
||||||
|
LogCore: UTS: Unreal Trace Server launched successfully
|
||||||
|
LogTrace: Initializing trace...
|
||||||
|
LogCore: Display: Requested channels: 'cpu,gpu,frame,log,bookmark,screenshot,region'
|
||||||
|
LogCore: No trace connection. Tracing to in-memory cache.
|
||||||
|
LogTrace: Display: Control listening on port 35583
|
||||||
|
LogTrace: Finished trace initialization.
|
||||||
|
LogCsvProfiler: Display: Metadata set : platform="Windows"
|
||||||
|
LogCsvProfiler: Display: Metadata set : config="Development"
|
||||||
|
LogCsvProfiler: Display: Metadata set : buildversion="++UE5+Release-5.7-CL-51494982"
|
||||||
|
LogCsvProfiler: Display: Metadata set : engineversion="5.7.4-51494982+++UE5+Release-5.7"
|
||||||
|
LogCsvProfiler: Display: Metadata set : enginereleaseversion="5.7.4"
|
||||||
|
LogCsvProfiler: Display: Metadata set : os="Windows 11 (25H2) [10.0.26200.7171] "
|
||||||
|
LogCsvProfiler: Display: Metadata set : cpu="GenuineIntel|12th Gen Intel(R) Core(TM) i9-12900H"
|
||||||
|
LogCsvProfiler: Display: Metadata set : pgoenabled="0"
|
||||||
|
LogCsvProfiler: Display: Metadata set : pgoprofilingenabled="0"
|
||||||
|
LogCsvProfiler: Display: Metadata set : ltoenabled="0"
|
||||||
|
LogCsvProfiler: Display: Metadata set : asan="0"
|
||||||
|
LogCsvProfiler: Display: Metadata set : mergedmodules="0"
|
||||||
|
LogCsvProfiler: Display: Metadata set : commandline="" C:\ASTERION\GIT\PS_ReplaySystem\PS_Replay\PS_Replay.uproject -AUTH_LOGIN=unused -AUTH_PASSWORD=9fa71e90c40a4dc88f1ea09d29826566 -AUTH_TYPE=exchangecode -epicapp=UE_5.7 -epicenv=Prod -EpicPortal -epicusername=Asterion_VR -epicuserid=2f7b7ff5607d4cd796afc096af9aba6f -epiclocale=fr -epicsandboxid=ue""
|
||||||
|
LogCsvProfiler: Display: Metadata set : loginid="5440aecf4e36dfe9905193a4742566fb"
|
||||||
|
LogCsvProfiler: Display: Metadata set : llm="0"
|
||||||
|
LogStats: Stats thread started at 0.433571
|
||||||
|
LogCsvProfiler: Display: Metadata set : systemresolution.resx="1280"
|
||||||
|
LogCsvProfiler: Display: Metadata set : systemresolution.resy="720"
|
||||||
|
LogICUInternationalization: ICU TimeZone Detection - Raw Offset: +1:00, Platform Override: ''
|
||||||
|
LogInit: Session CrashGUID >====================================================
|
||||||
|
Session CrashGUID > UECC-Windows-36F8C42B45F3F6FAC0605DBD9FB7DC47
|
||||||
|
Session CrashGUID >====================================================
|
||||||
|
LogConfig: No local boot hotfix file found at: [../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Saved/PersistentDownloadDir/HotfixForNextBoot.txt]
|
||||||
|
LogAudio: Display: Pre-Initializing Audio Device Manager...
|
||||||
|
LogAudio: Display: AudioInfo: 'OPUS' Registered
|
||||||
|
LogAudioDebug: Display: Lib vorbis DLL was dynamically loaded.
|
||||||
|
LogAudio: Display: AudioInfo: 'OGG' Registered
|
||||||
|
LogAudio: Display: AudioInfo: 'ADPCM' Registered
|
||||||
|
LogAudio: Display: AudioInfo: 'PCM' Registered
|
||||||
|
LogAudio: Display: AudioInfo: 'BINKA' Registered
|
||||||
|
LogAudio: Display: AudioInfo: 'RADA' Registered
|
||||||
|
LogAudio: Display: Audio Device Manager Pre-Initialized
|
||||||
|
LogPluginManager: Looking for build plugins target receipt
|
||||||
|
LogAssetRegistry: Display: No AssetDiscovery cache present at ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/CachedAssetRegistryDiscovery.bin. AssetRegistry discovery of files will be uncached.
|
||||||
|
LogPluginManager: Found matching target receipt: ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Binaries/Win64/PS_ReplayEditor.target
|
||||||
|
LogPluginManager: Looking for enabled plugins target receipt
|
||||||
|
LogPluginManager: Found matching target receipt: ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Binaries/Win64/PS_ReplayEditor.target
|
||||||
|
LogConfig: Display: Loading Android ini files took 0.09 seconds
|
||||||
|
LogConfig: Display: Loading VulkanPC ini files took 0.10 seconds
|
||||||
|
LogConfig: Display: Loading Mac ini files took 0.10 seconds
|
||||||
|
LogConfig: Display: Loading IOS ini files took 0.11 seconds
|
||||||
|
LogConfig: Display: Loading Unix ini files took 0.11 seconds
|
||||||
|
LogPluginManager: Mounting Engine plugin AudioInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin BaseMaterial
|
||||||
|
LogPluginManager: Mounting Engine plugin Bridge
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosCloth
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosVD
|
||||||
|
LogPluginManager: Mounting Engine plugin CmdLinkServer
|
||||||
|
LogPluginManager: Mounting Engine plugin EnhancedInput
|
||||||
|
LogPluginManager: Mounting Engine plugin Fab
|
||||||
|
LogPluginManager: Mounting Engine plugin IoStoreInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin MassInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin MeshPainting
|
||||||
|
LogPluginManager: Mounting Engine plugin RenderGraphInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin TraceUtilities
|
||||||
|
LogPluginManager: Mounting Engine plugin UbaController
|
||||||
|
LogPluginManager: Mounting Engine plugin WorldMetrics
|
||||||
|
LogPluginManager: Mounting Engine plugin XGEController
|
||||||
|
LogPluginManager: Mounting Engine plugin CameraShakePreviewer
|
||||||
|
LogPluginManager: Mounting Engine plugin GameplayCameras
|
||||||
|
LogPluginManager: Mounting Engine plugin EngineCameras
|
||||||
|
LogPluginManager: Mounting Engine plugin CompositeCore
|
||||||
|
LogPluginManager: Mounting Engine plugin AssetManagerEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin ChangelistReview
|
||||||
|
LogPluginManager: Mounting Engine plugin BlueprintHeaderView
|
||||||
|
LogPluginManager: Mounting Engine plugin CurveEditorTools
|
||||||
|
LogPluginManager: Mounting Engine plugin ColorGrading
|
||||||
|
LogPluginManager: Mounting Engine plugin DataValidation
|
||||||
|
LogConfig: Display: Loading TVOS ini files took 0.13 seconds
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorScriptingUtilities
|
||||||
|
LogConfig: Display: Loading Windows ini files took 0.13 seconds
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorDebugTools
|
||||||
|
LogPluginManager: Mounting Engine plugin FacialAnimation
|
||||||
|
LogPluginManager: Mounting Engine plugin CryptoKeys
|
||||||
|
LogPluginManager: Mounting Engine plugin EngineAssetDefinitions
|
||||||
|
LogPluginManager: Mounting Engine plugin GameplayTagsEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin MacGraphicsSwitching
|
||||||
|
LogPluginManager: Mounting Engine plugin MaterialAnalyzer
|
||||||
|
LogConfig: Display: Loading VisionOS ini files took 0.13 seconds
|
||||||
|
LogPluginManager: Mounting Engine plugin MeshLODToolset
|
||||||
|
LogPluginManager: Mounting Engine plugin ModelingToolsEditorMode
|
||||||
|
LogPluginManager: Mounting Engine plugin MobileLauncherProfileWizard
|
||||||
|
LogPluginManager: Mounting Engine plugin PluginBrowser
|
||||||
|
LogPluginManager: Mounting Engine plugin SequencerAnimTools
|
||||||
|
LogPluginManager: Mounting Engine plugin ProxyLODPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryMode
|
||||||
|
LogConfig: Display: Loading Linux ini files took 0.14 seconds
|
||||||
|
LogPluginManager: Mounting Engine plugin SpeedTreeImporter
|
||||||
|
LogPluginManager: Mounting Engine plugin StylusInput
|
||||||
|
LogPluginManager: Mounting Engine plugin UMGWidgetPreview
|
||||||
|
LogPluginManager: Mounting Engine plugin UVEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin WorldPartitionHLODUtilities
|
||||||
|
LogPluginManager: Mounting Engine plugin AdvancedRenamer
|
||||||
|
LogPluginManager: Mounting Engine plugin AutomationUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin BackChannel
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosCaching
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosNiagara
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosSolverPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin ChaosUserDataPT
|
||||||
|
LogPluginManager: Mounting Engine plugin CharacterAI
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorDataStorage
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorDataStorageFeatures
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorPerformance
|
||||||
|
LogPluginManager: Mounting Engine plugin EditorTelemetry
|
||||||
|
LogPluginManager: Mounting Engine plugin Fracture
|
||||||
|
LogPluginManager: Mounting Engine plugin FullBodyIK
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryCollectionPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryFlow
|
||||||
|
LogPluginManager: Mounting Engine plugin GlobalConfigurationData
|
||||||
|
LogPluginManager: Mounting Engine plugin LevelSequenceNavigatorBridge
|
||||||
|
LogPluginManager: Mounting Engine plugin LocalizableMessage
|
||||||
|
LogPluginManager: Mounting Engine plugin LowLevelNetTrace
|
||||||
|
LogPluginManager: Mounting Engine plugin MeshModelingToolsetExp
|
||||||
|
LogPluginManager: Mounting Engine plugin Dataflow
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryDataflow
|
||||||
|
LogPluginManager: Mounting Engine plugin NFORDenoise
|
||||||
|
LogPluginManager: Mounting Engine plugin PlanarCut
|
||||||
|
LogPluginManager: Mounting Engine plugin PlatformCrypto
|
||||||
|
LogPluginManager: Mounting Engine plugin PythonScriptPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin RuntimeTelemetry
|
||||||
|
LogPluginManager: Mounting Engine plugin SequenceNavigator
|
||||||
|
LogPluginManager: Mounting Engine plugin ToolPresets
|
||||||
|
LogPluginManager: Mounting Engine plugin TcpMessaging
|
||||||
|
LogPluginManager: Mounting Engine plugin UdpMessaging
|
||||||
|
LogPluginManager: Mounting Engine plugin ActorLayerUtilities
|
||||||
|
LogPluginManager: Mounting Engine plugin AndroidDeviceProfileSelector
|
||||||
|
LogPluginManager: Mounting Engine plugin AndroidFileServer
|
||||||
|
LogPluginManager: Mounting Engine plugin AndroidMoviePlayer
|
||||||
|
LogPluginManager: Mounting Engine plugin AndroidPermission
|
||||||
|
LogPluginManager: Mounting Engine plugin AppleImageUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin AppleMoviePlayer
|
||||||
|
LogPluginManager: Mounting Engine plugin ArchVisCharacter
|
||||||
|
LogPluginManager: Mounting Engine plugin AssetTags
|
||||||
|
LogPluginManager: Mounting Engine plugin AudioCapture
|
||||||
|
LogPluginManager: Mounting Engine plugin AudioSynesthesia
|
||||||
|
LogPluginManager: Mounting Engine plugin AudioWidgets
|
||||||
|
LogPluginManager: Mounting Engine plugin CableComponent
|
||||||
|
LogPluginManager: Mounting Engine plugin ChunkDownloader
|
||||||
|
LogPluginManager: Mounting Engine plugin CustomMeshComponent
|
||||||
|
LogPluginManager: Mounting Engine plugin ComputeFramework
|
||||||
|
LogPluginManager: Mounting Engine plugin ExampleDeviceProfileSelector
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryCache
|
||||||
|
LogPluginManager: Mounting Engine plugin GeometryProcessing
|
||||||
|
LogPluginManager: Mounting Engine plugin GoogleCloudMessaging
|
||||||
|
LogPluginManager: Mounting Engine plugin GooglePAD
|
||||||
|
LogPluginManager: Mounting Engine plugin HairStrands
|
||||||
|
LogPluginManager: Mounting Engine plugin LinuxDeviceProfileSelector
|
||||||
|
LogPluginManager: Mounting Engine plugin LocationServicesBPLibrary
|
||||||
|
LogPluginManager: Mounting Engine plugin MeshModelingToolset
|
||||||
|
LogPluginManager: Mounting Engine plugin Metasound
|
||||||
|
LogPluginManager: Mounting Engine plugin MobilePatchingUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin MsQuic
|
||||||
|
LogPluginManager: Mounting Engine plugin ProceduralMeshComponent
|
||||||
|
LogPluginManager: Mounting Engine plugin PropertyBindingUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin ResonanceAudio
|
||||||
|
LogPluginManager: Mounting Engine plugin RigVM
|
||||||
|
LogPluginManager: Mounting Engine plugin SignificanceManager
|
||||||
|
LogPluginManager: Mounting Engine plugin PropertyAccessEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin SoundFields
|
||||||
|
LogPluginManager: Mounting Engine plugin StateTree
|
||||||
|
LogPluginManager: Mounting Engine plugin Synthesis
|
||||||
|
LogPluginManager: Mounting Engine plugin WaveTable
|
||||||
|
LogPluginManager: Mounting Engine plugin WebMMoviePlayer
|
||||||
|
LogPluginManager: Mounting Engine plugin WindowsMoviePlayer
|
||||||
|
LogPluginManager: Mounting Engine plugin WindowsDeviceProfileSelector
|
||||||
|
LogPluginManager: Mounting Engine plugin AnimationSharing
|
||||||
|
LogPluginManager: Mounting Engine plugin CodeLiteSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin GitSourceControl
|
||||||
|
LogPluginManager: Mounting Engine plugin GPUReshape
|
||||||
|
LogPluginManager: Mounting Engine plugin KDevelopSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin N10XSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin NamingTokens
|
||||||
|
LogPluginManager: Mounting Engine plugin NullSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin PerforceSourceControl
|
||||||
|
LogPluginManager: Mounting Engine plugin PixWinPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin PlasticSourceControl
|
||||||
|
LogPluginManager: Mounting Engine plugin PluginUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin ProjectLauncher
|
||||||
|
LogPluginManager: Mounting Engine plugin RiderSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin IOSDeviceProfileSelector
|
||||||
|
LogPluginManager: Mounting Engine plugin SubversionSourceControl
|
||||||
|
LogPluginManager: Mounting Engine plugin RenderDocPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin TextureFormatOodle
|
||||||
|
LogPluginManager: Mounting Engine plugin VisualStudioCodeSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin UObjectPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin VisualStudioSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin Cascade
|
||||||
|
LogPluginManager: Mounting Engine plugin XCodeSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin Niagara
|
||||||
|
LogPluginManager: Mounting Engine plugin NiagaraPreviewContent
|
||||||
|
LogPluginManager: Mounting Engine plugin NiagaraSimCaching
|
||||||
|
LogPluginManager: Mounting Engine plugin InterchangeAssets
|
||||||
|
LogPluginManager: Mounting Engine plugin InterchangeEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin Interchange
|
||||||
|
LogPluginManager: Mounting Engine plugin MetaHumanSDK
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineBase
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineServices
|
||||||
|
LogPluginManager: Mounting Engine plugin EOSShared
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineSubsystem
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineSubsystemNull
|
||||||
|
LogPluginManager: Mounting Engine plugin InterchangeTests
|
||||||
|
LogPluginManager: Mounting Engine plugin InputDebugging
|
||||||
|
LogPluginManager: Mounting Engine plugin LauncherChunkInstaller
|
||||||
|
LogPluginManager: Mounting Engine plugin Takes
|
||||||
|
LogPluginManager: Mounting Engine plugin Paper2D
|
||||||
|
LogPluginManager: Mounting Engine plugin EnvironmentQueryEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin AISupport
|
||||||
|
LogPluginManager: Mounting Engine plugin ACLPlugin
|
||||||
|
LogPluginManager: Mounting Engine plugin AnimationData
|
||||||
|
LogPluginManager: Mounting Engine plugin AnimationModifierLibrary
|
||||||
|
LogPluginManager: Mounting Engine plugin BlendSpaceMotionAnalysis
|
||||||
|
LogPluginManager: Mounting Engine plugin ControlRig
|
||||||
|
LogPluginManager: Mounting Engine plugin ControlRigSpline
|
||||||
|
LogPluginManager: Mounting Engine plugin ControlRigModules
|
||||||
|
LogPluginManager: Mounting Engine plugin DeformerGraph
|
||||||
|
LogPluginManager: Mounting Engine plugin EaseCurveTool
|
||||||
|
LogPluginManager: Mounting Engine plugin GameplayInsights
|
||||||
|
LogPluginManager: Mounting Engine plugin IKRig
|
||||||
|
LogPluginManager: Mounting Engine plugin RigLogic
|
||||||
|
LogPluginManager: Mounting Engine plugin SkeletalMeshModelingTools
|
||||||
|
LogPluginManager: Mounting Engine plugin TweeningUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin OodleNetwork
|
||||||
|
LogPluginManager: Mounting Engine plugin DatasmithContent
|
||||||
|
LogPluginManager: Mounting Engine plugin GLTFExporter
|
||||||
|
LogPluginManager: Mounting Engine plugin VariantManager
|
||||||
|
LogPluginManager: Mounting Engine plugin VariantManagerContent
|
||||||
|
LogPluginManager: Mounting Engine plugin AlembicImporter
|
||||||
|
LogPluginManager: Mounting Engine plugin AndroidMedia
|
||||||
|
LogPluginManager: Mounting Engine plugin AvfMedia
|
||||||
|
LogPluginManager: Mounting Engine plugin SkeletalReduction
|
||||||
|
LogPluginManager: Mounting Engine plugin ImgMedia
|
||||||
|
LogPluginManager: Mounting Engine plugin MediaCompositing
|
||||||
|
LogPluginManager: Mounting Engine plugin MediaPlayerEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin MediaPlate
|
||||||
|
LogPluginManager: Mounting Engine plugin WebMMedia
|
||||||
|
LogPluginManager: Mounting Engine plugin WmfMedia
|
||||||
|
LogPluginManager: Mounting Engine plugin LevelSequenceEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin SequencerScripting
|
||||||
|
LogPluginManager: Mounting Engine plugin SequenceValidator
|
||||||
|
LogPluginManager: Mounting Engine plugin TemplateSequence
|
||||||
|
LogPluginManager: Mounting Engine plugin NNEDenoiser
|
||||||
|
LogPluginManager: Mounting Engine plugin NNERuntimeORT
|
||||||
|
LogPluginManager: Mounting Engine plugin DumpGPUServices
|
||||||
|
LogPluginManager: Mounting Engine plugin CLionSourceCodeAccess
|
||||||
|
LogPluginManager: Mounting Engine plugin PropertyAccessNode
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineSubsystemUtils
|
||||||
|
LogPluginManager: Mounting Engine plugin ActorSequence
|
||||||
|
LogPluginManager: Mounting Engine plugin PortableObjectFileDataSource
|
||||||
|
LogPluginManager: Mounting Engine plugin ContentBrowserAssetDataSource
|
||||||
|
LogPluginManager: Mounting Engine plugin ContentBrowserClassDataSource
|
||||||
|
LogPluginManager: Mounting Engine plugin ContentBrowserFileDataSource
|
||||||
|
LogPluginManager: Mounting Engine plugin BaseCharacterFXEditor
|
||||||
|
LogPluginManager: Mounting Engine plugin ObjectMixer
|
||||||
|
LogPluginManager: Mounting Engine plugin LightMixer
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineSubsystemGooglePlay
|
||||||
|
LogPluginManager: Mounting Engine plugin XInputDevice
|
||||||
|
LogPluginManager: Mounting Engine plugin OnlineSubsystemIOS
|
||||||
|
LogPluginManager: Mounting Project plugin ReplaySystem
|
||||||
|
SourceControl: Revision control is disabled
|
||||||
|
SourceControl: Revision control is disabled
|
||||||
|
SourceControl: Revision control is disabled
|
||||||
|
LogConfig: Applying CVar settings from Section [/Script/CompositeCore.CompositeCorePluginSettings] File [Engine]
|
||||||
|
LogStudioTelemetry: Started StudioTelemetry Session
|
||||||
|
LogNFORDenoise: NFORDenoise function starting up
|
||||||
|
LogStudioTelemetry: Started StudioTelemetry Session
|
||||||
|
LogWindows: Failed to load 'WinPixGpuCapturer.dll' (GetLastError=126)
|
||||||
|
LogWindows: File 'WinPixGpuCapturer.dll' does not exist
|
||||||
|
PixWinPlugin: PIX capture plugin failed to initialize! Check that the process is launched from PIX.
|
||||||
|
LogConfig: Applying CVar settings from Section [/Script/RenderDocPlugin.RenderDocPluginSettings] File [Engine]
|
||||||
|
RenderDocPlugin: Display: RenderDoc plugin will not be loaded. Use '-AttachRenderDoc' on the cmd line or enable 'renderdoc.AutoAttach' in the plugin settings.
|
||||||
|
LogEOSShared: Loaded "C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/EOSSDK-Win64-Shipping.dll"
|
||||||
|
LogEOSShared: FEOSSDKManager::Initialize Initializing EOSSDK Version:1.19.0.3-49960398
|
||||||
|
LogInit: Using libcurl 8.12.1
|
||||||
|
LogInit: - built for Windows
|
||||||
|
LogInit: - supports SSL with OpenSSL/1.1.1t
|
||||||
|
LogInit: - supports HTTP deflate (compression) using libz 1.3
|
||||||
|
LogInit: - other features:
|
||||||
|
LogInit: CURL_VERSION_SSL
|
||||||
|
LogInit: CURL_VERSION_LIBZ
|
||||||
|
LogInit: CURL_VERSION_IPV6
|
||||||
|
LogInit: CURL_VERSION_ASYNCHDNS
|
||||||
|
LogInit: CURL_VERSION_LARGEFILE
|
||||||
|
LogInit: CURL_VERSION_TLSAUTH_SRP
|
||||||
|
LogInit: CURL_VERSION_HTTP2
|
||||||
|
LogInit: CurlRequestOptions (configurable via config and command line):
|
||||||
|
LogInit: - bVerifyPeer = true - Libcurl will verify peer certificate
|
||||||
|
LogInit: - bUseHttpProxy = false - Libcurl will NOT use HTTP proxy
|
||||||
|
LogInit: - CVarHttpCurlReuseConnectionEnabled = true - Libcurl will reuse connections
|
||||||
|
LogInit: - MaxHostConnections = 16 - Libcurl will limit the number of connections to a host
|
||||||
|
LogInit: - LocalHostAddr = Default
|
||||||
|
LogInit: - BufferSize = 65536
|
||||||
|
LogInit: CreateHttpThread using FCurlMultiPollEventLoopHttpThread
|
||||||
|
LogInit: Creating http thread with maximum 256 concurrent requests
|
||||||
|
LogInit: WinSock: version 1.1 (2.2), MaxSocks=32767, MaxUdp=65467
|
||||||
|
LogOnline: OSS: Created online subsystem instance for: NULL
|
||||||
|
LogOnline: OSS: TryLoadSubsystemAndSetDefault: Loaded subsystem for type [NULL]
|
||||||
|
LogInit: ExecutableName: UnrealEditor.exe
|
||||||
|
LogInit: Build: ++UE5+Release-5.7-CL-51494982
|
||||||
|
LogInit: Platform=WindowsEditor
|
||||||
|
LogInit: MachineId=5440aecf4e36dfe9905193a4742566fb
|
||||||
|
LogInit: DeviceId=
|
||||||
|
LogInit: Engine Version: 5.7.4-51494982+++UE5+Release-5.7
|
||||||
|
LogInit: Compatible Engine Version: 5.7.0-47537391+++UE5+Release-5.7
|
||||||
|
LogInit: Net CL: 47537391
|
||||||
|
LogInit: OS: Windows 11 (25H2) [10.0.26200.7171] (), CPU: 12th Gen Intel(R) Core(TM) i9-12900H, GPU: Intel(R) Iris(R) Xe Graphics
|
||||||
|
LogInit: CPU Model ID: 69a3, microcode revision: 43b
|
||||||
|
LogInit: Compiled (64-bit): Mar 6 2026 12:43:05
|
||||||
|
LogInit: Architecture: x64
|
||||||
|
LogInit: Compiled with Visual C++: 19.44.35223.00
|
||||||
|
LogInit: Build Configuration: Development
|
||||||
|
LogInit: Branch Name: ++UE5+Release-5.7
|
||||||
|
LogInit: Command Line: -AUTH_LOGIN=unused -AUTH_PASSWORD=9fa71e90c40a4dc88f1ea09d29826566 -AUTH_TYPE=exchangecode -epicapp=UE_5.7 -epicenv=Prod -EpicPortal -epicusername=Asterion_VR -epicuserid=2f7b7ff5607d4cd796afc096af9aba6f -epiclocale=fr -epicsandboxid=ue
|
||||||
|
LogInit: Base Directory: C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/
|
||||||
|
LogInit: Allocator: Mimalloc
|
||||||
|
LogInit: Installed Engine Build: 1
|
||||||
|
LogInit: This binary is optimized with LTO: no, PGO: no, instrumented for PGO data collection: no
|
||||||
|
LogDevObjectVersion: Number of dev versions registered: 36
|
||||||
|
LogDevObjectVersion: Dev-Blueprints (B0D832E4-1F89-4F0D-ACCF-7EB736FD4AA2): 10
|
||||||
|
LogDevObjectVersion: Dev-Build (E1C64328-A22C-4D53-A36C-8E866417BD8C): 0
|
||||||
|
LogDevObjectVersion: Dev-Core (375EC13C-06E4-48FB-B500-84F0262A717E): 4
|
||||||
|
LogDevObjectVersion: Dev-Editor (E4B068ED-F494-42E9-A231-DA0B2E46BB41): 40
|
||||||
|
LogDevObjectVersion: Dev-Framework (CFFC743F-43B0-4480-9391-14DF171D2073): 37
|
||||||
|
LogDevObjectVersion: Dev-Mobile (B02B49B5-BB20-44E9-A304-32B752E40360): 3
|
||||||
|
LogDevObjectVersion: Dev-Networking (A4E4105C-59A1-49B5-A7C5-40C4547EDFEE): 0
|
||||||
|
LogDevObjectVersion: Dev-Online (39C831C9-5AE6-47DC-9A44-9C173E1C8E7C): 0
|
||||||
|
LogDevObjectVersion: Dev-Physics (78F01B33-EBEA-4F98-B9B4-84EACCB95AA2): 20
|
||||||
|
LogDevObjectVersion: Dev-Platform (6631380F-2D4D-43E0-8009-CF276956A95A): 0
|
||||||
|
LogDevObjectVersion: Dev-Rendering (12F88B9F-8875-4AFC-A67C-D90C383ABD29): 49
|
||||||
|
LogDevObjectVersion: Dev-Sequencer (7B5AE74C-D270-4C10-A958-57980B212A5A): 13
|
||||||
|
LogDevObjectVersion: Dev-VR (D7296918-1DD6-4BDD-9DE2-64A83CC13884): 3
|
||||||
|
LogDevObjectVersion: Dev-LoadTimes (C2A15278-BFE7-4AFE-6C17-90FF531DF755): 1
|
||||||
|
LogDevObjectVersion: Private-Geometry (6EACA3D4-40EC-4CC1-B786-8BED09428FC5): 3
|
||||||
|
LogDevObjectVersion: Dev-AnimPhys (29E575DD-E0A3-4627-9D10-D276232CDCEA): 17
|
||||||
|
LogDevObjectVersion: Dev-Anim (AF43A65D-7FD3-4947-9873-3E8ED9C1BB05): 15
|
||||||
|
LogDevObjectVersion: Dev-ReflectionCapture (6B266CEC-1EC7-4B8F-A30B-E4D90942FC07): 1
|
||||||
|
LogDevObjectVersion: Dev-Automation (0DF73D61-A23F-47EA-B727-89E90C41499A): 1
|
||||||
|
LogDevObjectVersion: FortniteMain (601D1886-AC64-4F84-AA16-D3DE0DEAC7D6): 225
|
||||||
|
LogDevObjectVersion: FortniteValkyrie (8DBC2C5B-54A7-43E0-A768-FCBB7DA29060): 8
|
||||||
|
LogDevObjectVersion: FortniteSeason (5B4C06B7-2463-4AF8-805B-BF70CDF5D0DD): 15
|
||||||
|
LogDevObjectVersion: FortniteRelease (E7086368-6B23-4C58-8439-1B7016265E91): 17
|
||||||
|
LogDevObjectVersion: Dev-Enterprise (9DFFBCD6-494F-0158-E221-12823C92A888): 11
|
||||||
|
LogDevObjectVersion: Dev-Niagara (F2AED0AC-9AFE-416F-8664-AA7FFA26D6FC): 1
|
||||||
|
LogDevObjectVersion: Dev-Destruction (174F1F0B-B4C6-45A5-B13F-2EE8D0FB917D): 10
|
||||||
|
LogDevObjectVersion: Dev-Physics-Ext (35F94A83-E258-406C-A318-09F59610247C): 41
|
||||||
|
LogDevObjectVersion: Dev-PhysicsMaterial-Chaos (B68FC16E-8B1B-42E2-B453-215C058844FE): 1
|
||||||
|
LogDevObjectVersion: Dev-CineCamera (B2E18506-4273-CFC2-A54E-F4BB758BBA07): 1
|
||||||
|
LogDevObjectVersion: Dev-VirtualProduction (64F58936-FD1B-42BA-BA96-7289D5D0FA4E): 1
|
||||||
|
LogDevObjectVersion: UE5-Main (697DD581-E64F-41AB-AA4A-51ECBEB7B628): 121
|
||||||
|
LogDevObjectVersion: UE5-Release (D89B5E42-24BD-4D46-8412-ACA8DF641779): 61
|
||||||
|
LogDevObjectVersion: UE5-SpecialProject (59DA5D52-1232-4948-B878-597870B8E98B): 9
|
||||||
|
LogDevObjectVersion: Dev-MediaFramework (6F0ED827-A609-4895-9C91-998D90180EA4): 2
|
||||||
|
LogDevObjectVersion: Dev-NaniteResearch (30D58BE3-95EA-4282-A6E3-B159D8EBB06A): 1
|
||||||
|
LogDevObjectVersion: Dev-ComputeFramework (6304A3E7-0059-4F59-8CFC-21BD7721FD4E): 0
|
||||||
|
LogInit: Presizing for max 25165824 objects, including 0 objects not considered by GC.
|
||||||
|
LogInit: Object subsystem initialized
|
||||||
|
LogConfig: Set CVar [[con.DebugEarlyDefault:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[con.DebugLateDefault:1]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[con.DebugLateCheat:1]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[LogNamedEventFilters:Frame *]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.setres:1280x720]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[framepro.ScopeMinTimeMicroseconds:10]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[fx.NiagaraAllowRuntimeScalabilityChanges:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[QualityLevelMapping:high]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[r.Occlusion.SingleRHIThreadStall:1]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Nanite.Streaming.ReservedResources:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[D3D12.Bindless.ResourceDescriptorHeapSize:32768]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[D3D12.Bindless.SamplerDescriptorHeapSize:2048]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.PSOPrecache.GlobalShaders:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.VRS.EnableSoftware:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.VRS.ContrastAdaptiveShading:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.VSync:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Applying CVar settings from Section [/Script/Engine.RendererSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[VisualizeCalibrationColorMaterialPath:/Engine/EngineMaterials/PPM_DefaultCalibrationColor.PPM_DefaultCalibrationColor]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[VisualizeCalibrationGrayscaleMaterialPath:/Engine/EngineMaterials/PPM_DefaultCalibrationGrayscale.PPM_DefaultCalibrationGrayscale]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.GPUCrashDebugging:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[MaxSkinBones:(Default=65536,PerPlatform=(("Mobile", 256)))]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Shaders.RemoveUnusedInterpolators:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Shadow.DetectVertexShaderLayerAtRuntime:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.RoughDiffuse:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.SheenQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.ShadingQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.TileCoord8bits:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.Glints:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.ClosuresPerPixel:4]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Refraction.Blur:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.AllowStaticLighting:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.GenerateMeshDistanceFields:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.DynamicGlobalIlluminationMethod:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.ReflectionMethod:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.SkinCache.CompileShaders:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.RayTracing:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.RayTracing.RayTracingProxies.ProjectEnabled:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Substrate.ProjectGBufferFormat:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.Enable:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.DefaultFeature.LocalExposure.HighlightContrastScale:0.8]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[r.DefaultFeature.LocalExposure.ShadowContrastScale:0.8]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Applying CVar settings from Section [/Script/Engine.RendererOverrideSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Applying CVar settings from Section [/Script/Engine.StreamingSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.MinBulkDataSizeForAsyncLoading:131072]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.AsyncLoadingThreadEnabled:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.EventDrivenLoaderEnabled:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.WarnIfTimeLimitExceeded:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.TimeLimitExceededMultiplier:1.5]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.TimeLimitExceededMinTime:0.005]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.UseBackgroundLevelStreaming:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.PriorityAsyncLoadingExtraTime:15.0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.LevelStreamingActorsUpdateTimeLimit:5.0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.PriorityLevelStreamingActorsUpdateExtraTime:5.0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.LevelStreamingComponentsRegistrationGranularity:10]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.UnregisterComponentsTimeLimit:1.0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.LevelStreamingComponentsUnregistrationGranularity:5]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[s.MaxPackageSummarySize:16384]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[s.FlushStreamingOnExit:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[FixedBootOrder:/Script/Engine/Default__SoundBase]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[FixedBootOrder:/Script/Engine/Default__MaterialInterface]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: CVar [[FixedBootOrder:/Script/Engine/Default__DeviceProfileManager]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Applying CVar settings from Section [/Script/Engine.GarbageCollectionSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.MaxObjectsNotConsideredByGC:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.FlushStreamingOnGC:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.NumRetriesBeforeForcingGC:10]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.AllowParallelGC:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.TimeBetweenPurgingPendingKillObjects:61.1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.MaxObjectsInEditor:25165824]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.IncrementalBeginDestroyEnabled:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.CreateGCClusters:1]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.MinGCClusterSize:5]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.AssetClustreringEnabled:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.ActorClusteringEnabled:0]]
|
||||||
|
[2026.07.02-15.26.46:244][ 0]LogConfig: Set CVar [[gc.VerifyUObjectsAreNotFGCObjects:0]]
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: Set CVar [[gc.GarbageEliminationEnabled:1]]
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: Applying CVar settings from Section [/Script/Engine.NetworkSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[NetworkEmulationProfiles:(ProfileName="Average",ToolTip="Simulates average internet conditions")]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[NetworkEmulationProfiles:(ProfileName="Bad",ToolTip="Simulates laggy internet conditions")]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[NetworkEmulationProfiles:(ProfileName="BufferBloat",ToolTip="Simulates a connection affected by buffer bloat (in and out)")]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: Applying CVar settings from Section [/Script/UnrealEd.CookerSettings] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[DefaultASTCQualityBySpeed:2]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[DefaultASTCQualityBySize:3]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[DefaultASTCQualityBySizeHQ:4]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:WidgetBlueprint]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:GroupActor]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:MetaData]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:ObjectRedirector]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:NavMeshRenderingComponent]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:ReflectionCaptureComponent]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:TextRenderComponent]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:Font]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:InterpCurveEdSetup]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:MaterialExpression]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:NiagaraEmitter]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:NiagaraScript]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:ParticleEmitter]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:ParticleLODLevel]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:ParticleModule]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:SubUVAnimation]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:SoundNode]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:GameplayEffectUIData]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedServer:AmbientSound]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedClient:WidgetBlueprint]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedClient:GroupActor]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedClient:MetaData]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedClient:ObjectRedirector]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[ClassesExcludedOnDedicatedClient:InterpCurveEdSetup]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.AllowStaticLighting]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.MaterialEditor.LWCTruncateMode]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.VelocityOutputPass]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.SelectiveBasePassOutputs]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.DBuffer]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Mobile.DBuffer]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.Symbols]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.GenerateSymbols]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.WriteSymbols]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.AllowUniqueSymbols]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.ExtraData]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.Shaders.Optimize]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:245][ 0]LogConfig: CVar [[VersionedIntRValues:r.CompileShadersForDevelopment]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:246][ 0]LogConfig: CVar [[VersionedIntRValues:r.MobileHDR]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:246][ 0]LogConfig: CVar [[VersionedIntRValues:r.UsePreExposure]] deferred - dummy variable created
|
||||||
|
[2026.07.02-15.26.46:246][ 0]LogCsvProfiler: Display: Metadata set : systemresolution.resx="1536"
|
||||||
|
[2026.07.02-15.26.46:246][ 0]LogCsvProfiler: Display: Metadata set : systemresolution.resy="864"
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [ViewDistanceQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.SkeletalMeshLODBias:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.ViewDistanceScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [AntiAliasingQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.FXAA.Quality:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TemporalAA.Quality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.History.R11G11B10:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.History.ScreenPercentage:200]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.History.UpdateQuality:3]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.ShadingRejection.Flickering:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.RejectionAntiAliasingQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.ReprojectionField:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.TSR.Resurrection:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [ShadowQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LightFunctionQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.ShadowQuality:5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.CSM.MaxCascades:10]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.MaxResolution:2048]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.MaxCSMResolution:2048]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.RadiusThreshold:0.01]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.DistanceScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.CSM.TransitionScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.PreShadowResolutionFactor:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DistanceFieldShadowing:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.VolumetricFog:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.VolumetricFog.GridPixelSize:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.VolumetricFog.GridSizeZ:128]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.VolumetricFog.HistoryMissSupersampleCount:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LightMaxDrawDistanceScale:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.CapsuleShadows:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.MaxPhysicalPages:4096]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.ResolutionLodBiasDirectional:-1.5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.ResolutionLodBiasDirectionalMoving:-1.5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.ResolutionLodBiasLocal:0.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.ResolutionLodBiasLocalMoving:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.SMRT.RayCountDirectional:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayDirectional:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.SMRT.RayCountLocal:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayLocal:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Shadow.Virtual.MarkCoarsePagesLocal:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [GlobalIlluminationQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DistanceFieldAO:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.SkylightIntensityMultiplier:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.AOQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.DiffuseIndirect.Allow:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LumenScene.DirectLighting.MaxLightsPerTile:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LumenScene.DirectLighting.UpdateFactor:32]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LumenScene.Radiosity.UpdateFactor:64]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LumenScene.Radiosity.ProbeSpacing:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LumenScene.Radiosity.HemisphereProbeResolution:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TraceMeshSDFs.Allow:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution:32]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget:100]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.DownsampleFactor:16]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.NumAdaptiveProbes:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.TracingOctahedronResolution:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.IrradianceFormat:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.StochasticInterpolation:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.FullResolutionJitterWidth:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.TwoSidedFoliageBackfaceDiffuse:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.ScreenTraces.HZBTraversal.FullResDepth:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.ShortRangeAO.BentNormal:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.ShortRangeAO.HorizonSearch.HZB:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.ShortRangeAO.HorizonSearch.ForegroundSampleRejectPower:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyVolume.GridPixelSize:32]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyVolume.TraceFromVolume:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyVolume.TracingOctahedronResolution:3]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyVolume.RadianceCache.ProbeResolution:8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget:70]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.RayTracing.Scene.BuildMode:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [ReflectionQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.SSR.Quality:3]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.SSR.HalfResSceneColor:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.Reflections.Allow:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.Reflections.DownsampleFactor:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.Reflections.MaxRoughnessToTraceForFoliage:0.4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.ScreenProbeGather.MaxRoughnessToEvaluateRoughSpecularForFoliage:0.8]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.Reflections.ScreenSpaceReconstruction.NumSamples:5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.Reflections.ScreenSpaceReconstruction.MinWeight:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyReflections.FrontLayer.Allow:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Lumen.TranslucencyReflections.FrontLayer.Enable:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [PostProcessQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.MotionBlurQuality:4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.MotionBlur.HalfResGather:0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.AmbientOcclusionMipLevelFactor:0.4]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.AmbientOcclusionMaxQuality:100]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.AmbientOcclusionLevels:-1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.AmbientOcclusionRadiusScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DepthOfFieldQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.RenderTargetPoolMin:400]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LensFlareQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.SceneColorFringeQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.EyeAdaptationQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.BloomQuality:5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Bloom.ScreenPercentage:50.000]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.FastBlurThreshold:100]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Upscale.Quality:3]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.LightShaftQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Filter.SizeScale:1]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.Tonemapper.Quality:5]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Gather.ResolutionDivisor:2 ; lower gathering resolution]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Gather.AccumulatorQuality:1 ; higher gathering accumulator quality]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Gather.PostfilterMethod:1 ; Median3x3 postfilering method]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Gather.EnableBokehSettings:0 ; no bokeh simulation when gathering]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Gather.RingCount:4 ; medium number of samples when gathering]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Scatter.ForegroundCompositing:1 ; additive foreground scattering]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Scatter.BackgroundCompositing:2 ; additive background scattering]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Scatter.EnableBokehSettings:1 ; bokeh simulation when scattering]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Scatter.MaxSpriteRatio:0.1 ; only a maximum of 10% of scattered bokeh]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Recombine.Quality:1 ; cheap slight out of focus]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Recombine.EnableBokehSettings:0 ; no bokeh simulation on slight out of focus]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.TemporalAAQuality:1 ; more stable temporal accumulation]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Kernel.MaxForegroundRadius:0.025]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Set CVar [[r.DOF.Kernel.MaxBackgroundRadius:0.025]]
|
||||||
|
[2026.07.02-15.26.46:247][ 0]LogConfig: Applying CVar settings from Section [TextureQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.MipBias:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.AmortizeCPUToGPUCopy:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.MaxNumTexturesToStreamPerFrame:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.Boost:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.MaxAnisotropy:8]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.VT.MaxAnisotropy:8]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.LimitPoolSizeToVRAM:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.PoolSize:1000]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Streaming.MaxEffectiveScreenSize:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Applying CVar settings from Section [EffectsQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.TranslucencyLightingVolume.Dim:64]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.RefractionQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SceneColorFormat:4]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.DetailMode:3]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.TranslucencyLightingVolume.Blur:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.MaterialQualityLevel:1 ; High quality]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SSS.Scale:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SSS.SampleSet:2]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SSS.Quality:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SSS.HalfRes:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SSGI.Quality:3]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.EmitterSpawnRateScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.ParticleLightQuality:2]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque:1 ; Always have FastSkyLUT 1 in this case to avoid wrong sky]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice:4]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution:16.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.FastSkyLUT:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMin:4.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMax:128.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.SampleCountMin:4.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.SampleCountMax:128.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.TransmittanceLUT.SampleCount:10.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.SkyAtmosphere.MultiScatteringLUT.SampleCount:15.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[fx.Niagara.QualityLevel:3]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.Refraction.OffsetQuality:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HeterogeneousVolumes.DownsampleFactor:2]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HeterogeneousVolumes.MaxStepCount:256]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HeterogeneousVolumes.Shadows.Resolution:512]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HeterogeneousVolumes.Shadows.Precision:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HeterogeneousVolumes.UseExistenceMask:0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Applying CVar settings from Section [FoliageQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[foliage.DensityScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[grass.DensityScale:1.0]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Applying CVar settings from Section [ShadingQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HairStrands.SkyLighting.IntegrationType:2]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HairStrands.SkyAO.SampleCount:4]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.HairStrands.Visibility.MSAA.SamplePerPixel:4]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Set CVar [[r.AnisotropicMaterials:1]]
|
||||||
|
[2026.07.02-15.26.46:248][ 0]LogConfig: Applying CVar settings from Section [LandscapeQuality@3] File [Scalability]
|
||||||
|
[2026.07.02-15.26.46:252][ 0]LogRHI: Using Default RHI: D3D12
|
||||||
|
[2026.07.02-15.26.46:252][ 0]LogRHI: Using Highest Feature Level of D3D12: SM6
|
||||||
|
[2026.07.02-15.26.46:252][ 0]LogRHI: Loading RHI module D3D12RHI
|
||||||
|
[2026.07.02-15.26.46:255][ 0]LogD3D12RHI: Loading WinPixEventRuntime.dll for PIX profiling (from ../../../Engine/Binaries/ThirdParty/Windows/WinPixEventRuntime/x64).
|
||||||
|
[2026.07.02-15.26.46:255][ 0]LogRHI: Checking if RHI D3D12 with Feature Level SM6 is supported by your system.
|
||||||
|
[2026.07.02-15.26.46:740][ 0]LogD3D12RHI: Found D3D12 adapter 0: NVIDIA GeForce RTX 3080 Ti Laptop GPU (VendorId: 10de, DeviceId: 2460, SubSysId: b271028, Revision: 00a1
|
||||||
|
[2026.07.02-15.26.46:740][ 0]LogD3D12RHI: Max supported Feature Level 12_2, shader model 6.7, binding tier 3, wave ops supported, atomic64 supported
|
||||||
|
[2026.07.02-15.26.46:740][ 0]LogD3D12RHI: Adapter has 16173MB of dedicated video memory, 0MB of dedicated system memory, and 16219MB of shared system memory, 1 output[s], UMA:false
|
||||||
|
[2026.07.02-15.26.46:740][ 0]LogD3D12RHI: Driver Version: 596.36 (internal:32.0.15.9636, unified:596.36)
|
||||||
|
[2026.07.02-15.26.46:740][ 0]LogD3D12RHI: Driver Date: 4-23-2026
|
||||||
|
[2026.07.02-15.26.46:822][ 0]LogD3D12RHI: Intel Extensions Framework not supported by driver. Please check if a driver update is available.
|
||||||
|
[2026.07.02-15.26.46:841][ 0]LogD3D12RHI: Found D3D12 adapter 1: Intel(R) Iris(R) Xe Graphics (VendorId: 8086, DeviceId: 46a6, SubSysId: b271028, Revision: 000c
|
||||||
|
[2026.07.02-15.26.46:841][ 0]LogD3D12RHI: Max supported Feature Level 12_1, shader model 6.7, binding tier 3, wave ops supported, atomic64 unsupported
|
||||||
|
[2026.07.02-15.26.46:841][ 0]LogD3D12RHI: Adapter has 128MB of dedicated video memory, 0MB of dedicated system memory, and 16219MB of shared system memory, 0 output[s], UMA:true
|
||||||
|
[2026.07.02-15.26.46:841][ 0]LogD3D12RHI: Driver Version: 32.0.101.7084 (internal:32.0.101.7084, unified:101.7084)
|
||||||
|
[2026.07.02-15.26.46:841][ 0]LogD3D12RHI: Driver Date: 1-15-2026
|
||||||
|
[2026.07.02-15.26.46:849][ 0]LogD3D12RHI: Found D3D12 adapter 2: Microsoft Basic Render Driver (VendorId: 1414, DeviceId: 008c, SubSysId: 0000, Revision: 0000
|
||||||
|
[2026.07.02-15.26.46:849][ 0]LogD3D12RHI: Max supported Feature Level 12_1, shader model 6.7, binding tier 3, wave ops supported, atomic64 supported
|
||||||
|
[2026.07.02-15.26.46:849][ 0]LogD3D12RHI: Adapter has 0MB of dedicated video memory, 0MB of dedicated system memory, and 16219MB of shared system memory, 0 output[s], UMA:true
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogD3D12RHI: D3D10Warp Version: 10.0.26100.7019
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogD3D12RHI: DirectX Agility SDK runtime found.
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogD3D12RHI: Chosen D3D12 Adapter Id = 0
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogRHI: RHI D3D12 with Feature Level SM6 is supported and will be used.
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogInit: Selected Device Profile: [WindowsEditor]
|
||||||
|
[2026.07.02-15.26.46:850][ 0]LogHAL: Display: Platform has ~ 32 GB [34015080448 / 34359738368 / 32], which maps to Largest [LargestMinGB=32, LargerMinGB=12, DefaultMinGB=8, SmallerMinGB=6, SmallestMinGB=0)
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogDeviceProfileManager: Going up to parent DeviceProfile [Windows]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogDeviceProfileManager: Going up to parent DeviceProfile []
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogDeviceProfileManager: Pushing Device Profile CVar: [[UI.SlateSDFText.RasterizationMode:Bitmap -> Msdf]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogDeviceProfileManager: Pushing Device Profile CVar: [[UI.SlateSDFText.ResolutionLevel:2 -> 2]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Applying CVar settings from Section [Startup] File [../../../Engine/Config/ConsoleVariables.ini]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Set CVar [[r.DumpShaderDebugInfo:2]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Set CVar [[p.chaos.AllowCreatePhysxBodies:1]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Set CVar [[fx.SkipVectorVMBackendOptimizations:1]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Applying CVar settings from Section [Startup_Windows] File [../../../Engine/Config/ConsoleVariables.ini]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Applying CVar settings from Section [ConsoleVariables] File [Engine]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Set CVar [[WindowsApplication.UseWorkerThreadForRawInput:0]]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogConfig: Applying CVar settings from Section [ConsoleVariables] File [C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Saved/Config/WindowsEditor/Editor.ini]
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogInit: Computer: ASTERION_VR_01
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogInit: User: jfoucher
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogInit: CPU Page size=4096, Cores=14
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogInit: High frequency timer resolution =10.000000 MHz
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogInit: Handheld Device: 0
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Process is running as part of a Windows Job with separate resource limits
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Memory total: Physical=31.7GB (32GB approx) Virtual=65.2GB
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Platform Memory Stats for WindowsEditor
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Process Physical Memory: 583.54 MB used, 628.89 MB peak
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Process Virtual Memory: 593.23 MB used, 593.23 MB peak
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Physical Memory: 21035.20 MB used, 11404.11 MB free, 32439.31 MB total
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogMemory: Virtual Memory: 37920.27 MB used, 28839.77 MB free, 66760.05 MB total
|
||||||
|
[2026.07.02-15.26.46:851][ 0]LogCsvProfiler: Display: Metadata set : extradevelopmentmemorymb="0"
|
||||||
|
[2026.07.02-15.26.46:854][ 0]LogWindows: WindowsPlatformFeatures enabled
|
||||||
|
[2026.07.02-15.26.46:856][ 0]LogSpline: Registered spline type: TypeId=0x54E3AD22, Impl=MultiSpline, Value=Vector
|
||||||
|
[2026.07.02-15.26.46:856][ 0]LogChaosDD: Chaos Debug Draw Startup
|
||||||
|
[2026.07.02-15.26.46:856][ 0]LogInit: Physics initialised using underlying interface: Chaos
|
||||||
|
[2026.07.02-15.26.46:857][ 0]LogInit: Overriding language with editor language configuration option (en).
|
||||||
|
[2026.07.02-15.26.46:857][ 0]LogInit: Using OS detected locale (fr-FR).
|
||||||
|
[2026.07.02-15.26.46:867][ 0]LogInit: Setting process to per monitor DPI aware
|
||||||
|
[2026.07.02-15.26.47:606][ 0]LogWindowsTextInputMethodSystem: Available input methods:
|
||||||
|
[2026.07.02-15.26.47:606][ 0]LogWindowsTextInputMethodSystem: - Français (France) - (Keyboard).
|
||||||
|
[2026.07.02-15.26.47:606][ 0]LogWindowsTextInputMethodSystem: - Français (France) - Correction de l’entrée tactile (TSF IME).
|
||||||
|
[2026.07.02-15.26.47:606][ 0]LogWindowsTextInputMethodSystem: Activated input method: Français (France) - (Keyboard).
|
||||||
|
[2026.07.02-15.26.47:616][ 0]LogWindowsTouchpad: Display: CacheForceMaxTouchpadSensitivityMode SetMaxTouchpadSensitivity
|
||||||
|
[2026.07.02-15.26.47:624][ 0]LogObj: Display: Attempting to load config data for Default__SlateThemeManager before the Class has been constructed/registered/linked (likely during module loading or early startup). This will result in the load silently failing and should be fixed.
|
||||||
|
[2026.07.02-15.26.47:629][ 0]LogSlate: New Slate User Created. Platform User Id 0, User Index 0, Is Virtual User: 0
|
||||||
|
[2026.07.02-15.26.47:629][ 0]LogSlate: Slate User Registered. User Index 0, Is Virtual User: 0
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogRHI: Using Default RHI: D3D12
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogRHI: Using Highest Feature Level of D3D12: SM6
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogRHI: Loading RHI module D3D12RHI
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogRHI: Checking if RHI D3D12 with Feature Level SM6 is supported by your system.
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogRHI: RHI D3D12 with Feature Level SM6 is supported and will be used.
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogD3D12RHI: Integrated GPU (iGPU): false
|
||||||
|
[2026.07.02-15.26.47:809][ 0]LogD3D12RHI: Display: Creating D3D12 RHI with Max Feature Level SM6
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogWindows: Attached monitors:
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogWindows: resolution: 1920x1080, work area: (0, 0) -> (1920, 1020), device: '\\.\DISPLAY1' [PRIMARY]
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogWindows: Found 1 attached monitors.
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogWindows: Gathering driver information using Windows Setup API
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogRHI: RHI Adapter Info:
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogRHI: Name: NVIDIA GeForce RTX 3080 Ti Laptop GPU
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogRHI: Driver Version: 596.36 (internal:32.0.15.9636, unified:596.36)
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogRHI: Driver Date: 4-23-2026
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogD3D12RHI: GPU DeviceId: 0x2460 (for the marketing name, search the web for "GPU Device Id")
|
||||||
|
[2026.07.02-15.26.47:811][ 0]LogD3D12RHI: InitD3DDevice: -D3DDebug = off -D3D12GPUValidation = off
|
||||||
|
[2026.07.02-15.26.47:949][ 0]LogNvidiaAftermath: Aftermath initialized
|
||||||
|
[2026.07.02-15.26.47:949][ 0]LogD3D12RHI: Emitting draw events for PIX profiling.
|
||||||
|
[2026.07.02-15.26.48:201][ 0]LogNvidiaAftermath: Aftermath enabled. Active feature flags:
|
||||||
|
[2026.07.02-15.26.48:201][ 0]LogNvidiaAftermath: - Feature: EnableResourceTracking
|
||||||
|
[2026.07.02-15.26.48:201][ 0]LogD3D12RHI: ID3D12Device1 is supported.
|
||||||
|
[2026.07.02-15.26.48:201][ 0]LogD3D12RHI: ID3D12Device2 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device3 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device4 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device5 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device6 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device7 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device8 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device9 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device10 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device11 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: ID3D12Device12 is supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Bindless is supported. MaxNonSamplerDescriptors: 1000000, MaxSamplerDescriptors: 2048
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Stencil ref from pixel shader is not supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Raster order views are supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Wave Operations are supported (wave size: min=32 max=32).
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Legacy Barriers Present in Build: Yes
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Enhanced Barriers Present in Build: Yes
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Enhanced Barriers Driver Support: Yes
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Preferred Barrier Implementation Type: Legacy
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Chosen Barrier Implementation: D3D12LegacyBarriers
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: D3D12 ray tracing tier 1.1 and bindless resources are supported.
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Mesh shader tier 1.0 is supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: AtomicInt64OnTypedResource is supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: AtomicInt64OnGroupShared is supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: AtomicInt64OnDescriptorHeapResource is supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Shader Model 6.6 atomic64 is supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Work Graphs are supported
|
||||||
|
[2026.07.02-15.26.48:202][ 0]LogD3D12RHI: Bindless is enabled (Configuration=RayTracing). Initializing allocators with 32768 Resource and 2048 Sampler descriptors
|
||||||
|
[2026.07.02-15.26.48:282][ 0]LogD3D12RHI: [GPUBreadCrumb] Successfully setup breadcrumb resource for DiagnosticBuffer (Queue: 0x000002280F235380)
|
||||||
|
[2026.07.02-15.26.48:283][ 0]LogD3D12RHI: [GPUBreadCrumb] Successfully setup breadcrumb resource for DiagnosticBuffer (Queue: 0x000002280F235640)
|
||||||
|
[2026.07.02-15.26.48:283][ 0]LogD3D12RHI: [GPUBreadCrumb] Successfully setup breadcrumb resource for DiagnosticBuffer (Queue: 0x000002280F235900)
|
||||||
|
[2026.07.02-15.26.48:283][ 0]LogD3D12RHI: Display: Not using pipeline state disk cache per r.D3D12.PSO.DiskCache=0
|
||||||
|
[2026.07.02-15.26.48:283][ 0]LogD3D12RHI: Display: Not using driver-optimized pipeline state disk cache per r.D3D12.PSO.DriverOptimizedDiskCache=0
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogD3D12RHI: NVIDIA Shader Execution Reordering NOT supported!
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogD3D12RHI: NVIDIA Ray Tracing Cluster Operations supported and enabled
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogD3D12RHI: NVIDIA Extended ray tracing pipeline state applied.
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogRHI: Texture pool is 9705 MB (70% of 13864 MB)
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogD3D12RHI: Async texture creation enabled
|
||||||
|
[2026.07.02-15.26.48:401][ 0]LogD3D12RHI: RHI has support for 64 bit atomics
|
||||||
|
[2026.07.02-15.26.48:421][ 0]LogVRS: Current RHI supports per-draw and screenspace Variable Rate Shading
|
||||||
|
[2026.07.02-15.26.48:424][ 0]LogCsvProfiler: Display: Metadata set : verbatimrhiname="D3D12"
|
||||||
|
[2026.07.02-15.26.48:424][ 0]LogCsvProfiler: Display: Metadata set : rhiname="D3D12"
|
||||||
|
[2026.07.02-15.26.48:424][ 0]LogCsvProfiler: Display: Metadata set : rhifeaturelevel="SM6"
|
||||||
|
[2026.07.02-15.26.48:424][ 0]LogCsvProfiler: Display: Metadata set : shaderplatform="PCD3D_SM6"
|
||||||
|
[2026.07.02-15.26.48:424][ 0]LogInit: Initializing FReadOnlyCVARCache
|
||||||
|
[2026.07.02-15.26.48:428][ 0]LogTurnkeySupport: Running Turnkey SDK detection: ' -ScriptsForProject="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" Turnkey -utf8output -WaitForUATMutex -command=VerifySdk -ReportFilename="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyReport_0.log" -log="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyLog_0.log" -project="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" -platform=all'
|
||||||
|
[2026.07.02-15.26.48:428][ 0]LogMonitoredProcess: Running Serialized UAT: [ cmd.exe /c ""C:/Program Files/Epic Games/UE_5.7/Engine/Build/BatchFiles/RunUAT.bat" -ScriptsForProject="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" Turnkey -utf8output -WaitForUATMutex -command=VerifySdk -ReportFilename="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyReport_0.log" -log="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyLog_0.log" -project="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" -platform=all" ]
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatASTC: Display: ASTCEnc version 5.0.1 library loaded
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatASTC
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatDXT
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatETC2
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatIntelISPCTexComp
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatUncompressed
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatOodle: Display: Oodle Texture TFO init; latest sdk version = 2.9.14
|
||||||
|
[2026.07.02-15.26.48:443][ 0]LogTextureFormatOodle: Display: Oodle Texture loading DLL: oo2tex_win64_2.9.14.dll
|
||||||
|
[2026.07.02-15.26.48:444][ 0]LogTextureFormatOodle: Display: Oodle Texture loading DLL: oo2tex_win64_2.9.5.dll
|
||||||
|
[2026.07.02-15.26.48:444][ 0]LogTextureFormatManager: Display: Loaded Base TextureFormat: TextureFormatOodle
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_ASTC'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_DXT'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_ETC2'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_OpenXR'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'AndroidClient'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_ASTCClient'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_DXTClient'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_ETC2Client'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_OpenXRClient'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_Multi'
|
||||||
|
[2026.07.02-15.26.48:480][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Android_MultiClient'
|
||||||
|
[2026.07.02-15.26.48:503][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'IOS'
|
||||||
|
[2026.07.02-15.26.48:503][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'IOSClient'
|
||||||
|
[2026.07.02-15.26.48:527][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Linux'
|
||||||
|
[2026.07.02-15.26.48:527][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'LinuxEditor'
|
||||||
|
[2026.07.02-15.26.48:527][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'LinuxServer'
|
||||||
|
[2026.07.02-15.26.48:527][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'LinuxClient'
|
||||||
|
[2026.07.02-15.26.48:549][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Mac'
|
||||||
|
[2026.07.02-15.26.48:549][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'MacEditor'
|
||||||
|
[2026.07.02-15.26.48:549][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'MacServer'
|
||||||
|
[2026.07.02-15.26.48:549][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'MacClient'
|
||||||
|
[2026.07.02-15.26.48:570][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'TVOS'
|
||||||
|
[2026.07.02-15.26.48:570][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'TVOSClient'
|
||||||
|
[2026.07.02-15.26.48:592][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'Windows'
|
||||||
|
[2026.07.02-15.26.48:592][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'WindowsEditor'
|
||||||
|
[2026.07.02-15.26.48:592][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'WindowsServer'
|
||||||
|
[2026.07.02-15.26.48:592][ 0]LogTargetPlatformManager: Display: Loaded TargetPlatform 'WindowsClient'
|
||||||
|
[2026.07.02-15.26.48:592][ 0]LogTargetPlatformManager: Display: Building Assets For WindowsEditor
|
||||||
|
[2026.07.02-15.26.48:636][ 0]LogTargetPlatformManager: Unable to find shader format SF_METAL_ES3_1_IOS from hinted modules, loading all potential format modules to find it
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: Loaded format module MetalShaderFormat
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_ES3_1_IOS
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_SM5_IOS
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_ES3_1_TVOS
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_SM5_TVOS
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_SM5
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_SM6
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_SIM
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_METAL_ES3_1
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: Loaded format module ShaderFormatD3D
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: PCD3D_SM6
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: PCD3D_SM5
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: PCD3D_ES31
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: Loaded format module ShaderFormatOpenGL
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: GLSL_150_ES31
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: GLSL_ES3_1_ANDROID
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: Loaded format module ShaderFormatVectorVM
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: VVM_1_0
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: Loaded format module VulkanShaderFormat
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_VULKAN_SM5
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_VULKAN_ES31_ANDROID
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_VULKAN_ES31
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_VULKAN_SM5_ANDROID
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogTargetPlatformManager: SF_VULKAN_SM6
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogRendererCore: Ray tracing is enabled (dynamic). Reason: r.RayTracing=1 and r.RayTracing.EnableOnDemand=1.
|
||||||
|
[2026.07.02-15.26.48:644][ 0]LogRendererCore: Ray tracing shaders are enabled.
|
||||||
|
[2026.07.02-15.26.48:647][ 0]LogDerivedDataCache: Display: Memory: Max Cache Size: -1 MB
|
||||||
|
[2026.07.02-15.26.48:647][ 0]LogDerivedDataCache: FDerivedDataBackendGraph: Pak pak cache file ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/DerivedDataCache/DDC.ddp not found, will not use a pak cache.
|
||||||
|
[2026.07.02-15.26.48:647][ 0]LogDerivedDataCache: Unable to find inner node Pak for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.48:647][ 0]LogDerivedDataCache: FDerivedDataBackendGraph: CompressedPak pak cache file ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/DerivedDataCache/Compressed.ddp not found, will not use a pak cache.
|
||||||
|
[2026.07.02-15.26.48:647][ 0]LogDerivedDataCache: Unable to find inner node CompressedPak for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogDerivedDataCache: Display: ../../../Engine/DerivedDataCache/Compressed.ddp: Opened pak cache for reading. (1729 MiB)
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogDerivedDataCache: FDerivedDataBackendGraph: EnterprisePak pak cache file ../../../Enterprise/DerivedDataCache/Compressed.ddp not found, will not use a pak cache.
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogDerivedDataCache: Unable to find inner node EnterprisePak for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogZenServiceInstance: Found registry key GlobalDataCachePath UE-LocalDataCachePath=C:/TEMP/UE_DDC
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogZenServiceInstance: Found registry key GlobalDataCachePath UE-LocalDataCachePath=C:/TEMP/UE_DDC
|
||||||
|
[2026.07.02-15.26.48:998][ 0]LogZenServiceInstance: Found local data cache path=C:/TEMP/UE_DDC
|
||||||
|
[2026.07.02-15.26.48:999][ 0]LogZenServiceInstance: Display: Launching zen utility 'C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/zen.exe service status'.
|
||||||
|
[2026.07.02-15.26.49:153][ 0]LogZenServiceInstance: Display: Launching zen utility 'C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/zen.exe service status'.
|
||||||
|
[2026.07.02-15.26.49:359][ 0]LogZenServiceInstance: Display: Read zen version cache file from 'C:/Users/j_foucher/AppData/Local/UnrealEngine/5.7/Saved/Zen/zen.version', version: '5.7.6-202510061608-windows-x64-release-9a1ebb9'
|
||||||
|
[2026.07.02-15.26.49:359][ 0]LogZenServiceInstance: InTree version at 'C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/zenserver.exe' is '5.7.6-202510061608-windows-x64-release-9a1ebb9'
|
||||||
|
[2026.07.02-15.26.49:359][ 0]LogZenServiceInstance: Display: Read zen version cache file from 'C:/Users/j_foucher/AppData/Local/UnrealEngine/Common/Zen/Install/zen.version', version: '5.8.13-202605190912-windows-x64-release-094f62c2'
|
||||||
|
[2026.07.02-15.26.49:359][ 0]LogZenServiceInstance: Installed version at 'C:/Users/j_foucher/AppData/Local/UnrealEngine/Common/Zen/Install/zenserver.exe' is '5.8.13-202605190912-windows-x64-release-094f62c2'
|
||||||
|
[2026.07.02-15.26.49:359][ 0]LogZenServiceInstance: Display: Installed service at 'C:/Users/j_foucher/AppData/Local/UnrealEngine/Common/Zen/Install/zenserver.exe' is up to date
|
||||||
|
[2026.07.02-15.26.49:360][ 0]LogZenServiceInstance: No current process using the data dir found, launching a new instance
|
||||||
|
[2026.07.02-15.26.49:360][ 0]LogZenServiceInstance: Display: Launching executable 'C:/Users/j_foucher/AppData/Local/UnrealEngine/Common/Zen/Install/zenserver.exe', working dir 'C:/Users/j_foucher/AppData/Local/UnrealEngine/Common/Zen/Install', data dir 'C:/TEMP/UE_DDC/Zen', args '--port 8558 --data-dir C:\TEMP\UE_DDC\Zen --http asio --gc-cache-duration-seconds 1209600 --gc-interval-seconds 21600 --gc-low-diskspace-threshold 2147483648 --cache-bucket-limit-overwrites --quiet --http-forceloopback --owner-pid 65908 --child-id Zen_65908_Startup'
|
||||||
|
[2026.07.02-15.26.49:667][ 0]LogZenServiceInstance: Display: Unreal Zen Storage Server HTTP service at http://[::1]:8558 status: OK!.
|
||||||
|
[2026.07.02-15.26.49:667][ 0]LogZenServiceInstance: Local ZenServer AutoLaunch initialization completed in 0.309 seconds
|
||||||
|
[2026.07.02-15.26.49:671][ 0]LogDerivedDataCache: Display: ZenLocal: Using ZenServer HTTP service at [::1] with namespace ue.ddc status: OK!.
|
||||||
|
[2026.07.02-15.26.49:671][ 0]LogDerivedDataCache: Local: Found registry key GlobalDataCachePath UE-LocalDataCachePath=C:/TEMP/UE_DDC
|
||||||
|
[2026.07.02-15.26.49:684][ 0]LogDerivedDataCache: C:/TEMP/UE_DDC: Speed tests took 0.01 seconds.
|
||||||
|
[2026.07.02-15.26.49:684][ 0]LogDerivedDataCache: Display: C:/TEMP/UE_DDC: Performance: Latency=0.03ms. RandomReadSpeed=745.60MBs, RandomWriteSpeed=83.60MBs. Assigned SpeedClass 'Local'
|
||||||
|
[2026.07.02-15.26.49:685][ 0]LogDerivedDataCache: Local: Using data cache path C:/TEMP/UE_DDC: DeleteOnly
|
||||||
|
[2026.07.02-15.26.49:685][ 0]LogDerivedDataCache: ZenShared: Disabled because Host is set to 'None'
|
||||||
|
[2026.07.02-15.26.49:685][ 0]LogDerivedDataCache: Unable to find inner node ZenShared for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.49:686][ 0]LogDerivedDataCache: Shared: Disabled because no path is configured.
|
||||||
|
[2026.07.02-15.26.49:686][ 0]LogDerivedDataCache: Unable to find inner node Shared for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.49:686][ 0]LogDerivedDataCache: Cloud: Disabled because Host is set to 'None'
|
||||||
|
[2026.07.02-15.26.49:686][ 0]LogDerivedDataCache: Unable to find inner node Cloud for hierarchy Hierarchy.
|
||||||
|
[2026.07.02-15.26.49:687][ 0]LogShaderCompilers: Guid format shader working directory is -7 characters bigger than the processId version (../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/Shaders/WorkingDirectory/65908/).
|
||||||
|
[2026.07.02-15.26.49:687][ 0]LogShaderCompilers: Cleaned the shader compiler working directory 'C:/Users/j_foucher/AppData/Local/Temp/UnrealShaderWorkingDir/6C1F154C4299414049C699AC100A95B8/'.
|
||||||
|
[2026.07.02-15.26.49:688][ 0]LogXGEController: Cannot use XGE Controller as Incredibuild is not installed on this machine.
|
||||||
|
[2026.07.02-15.26.49:688][ 0]LogUbaHorde: Display: UBA/Horde Configuration [Uba.Provider.Horde]: Not Enabled
|
||||||
|
[2026.07.02-15.26.49:688][ 0]LogShaderCompilers: Display: No distributed shader compiler controller found
|
||||||
|
[2026.07.02-15.26.49:688][ 0]LogShaderCompilers: Display: Using 10 local workers for shader compilation
|
||||||
|
[2026.07.02-15.26.49:691][ 0]LogShaderCompilers: Display: Compiling shader autogen file: ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/ShaderAutogen/PCD3D_SM6/AutogenShaderHeaders.ush
|
||||||
|
[2026.07.02-15.26.49:691][ 0]LogShaderCompilers: Display: Failed to delete old shader autogen file: ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/ShaderAutogen/PCD3D_SM6/AutogenShaderHeaders.ush
|
||||||
|
[2026.07.02-15.26.49:692][ 0]LogTurnkeySupport: Completed SDK detection: ExitCode = 0
|
||||||
|
[2026.07.02-15.26.49:692][ 0]LogShaderCompilers: Display: Shader autogen file written: ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/ShaderAutogen/PCD3D_SM6/AutogenShaderHeaders.ush
|
||||||
|
[2026.07.02-15.26.52:775][ 0]LogSlate: Using FreeType 2.10.0
|
||||||
|
[2026.07.02-15.26.52:775][ 0]LogSlate: SlateFontServices - WITH_FREETYPE: 1, WITH_HARFBUZZ: 1
|
||||||
|
[2026.07.02-15.26.52:790][ 0]LogStreaming: Warning: Failed to read file '../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_24x.png' error.
|
||||||
|
[2026.07.02-15.26.52:790][ 0]LogSlate: Could not load file for Slate resource: [../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_24x.png] file: [../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_24x.png]
|
||||||
|
[2026.07.02-15.26.52:790][ 0]LogStreaming: Warning: Failed to read file '../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_128x.png' error.
|
||||||
|
[2026.07.02-15.26.52:790][ 0]LogSlate: Could not load file for Slate resource: [../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_128x.png] file: [../../../Engine/Platforms/VisionOS/Content/Editor/Slate/Launcher/Platform_VisionOS_128x.png]
|
||||||
|
[2026.07.02-15.26.52:824][ 0]LogAssetRegistry: FAssetRegistry took 0.0046 seconds to start up
|
||||||
|
[2026.07.02-15.26.52:827][ 0]LogEditorDomain: Display: EditorDomain is Disabled
|
||||||
|
[2026.07.02-15.26.52:917][ 0]LogAssetRegistry: Display: AssetDataGatherer spent 0.000s loading caches ../../../../../../ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/CachedAssetRegistry_*.bin.
|
||||||
|
[2026.07.02-15.26.53:337][ 0]LogDeviceProfileManager: Display: Deviceprofile LinuxArm64Editor not found.
|
||||||
|
[2026.07.02-15.26.53:337][ 0]LogDeviceProfileManager: Display: Deviceprofile LinuxArm64 not found.
|
||||||
|
[2026.07.02-15.26.53:421][ 0]LogDeviceProfileManager: Active device profile: [00000228F31E1E00][00000228F3212800 82] WindowsEditor
|
||||||
|
[2026.07.02-15.26.53:421][ 0]LogCsvProfiler: Display: Metadata set : deviceprofile="WindowsEditor"
|
||||||
|
[2026.07.02-15.26.53:428][ 0]LogStreaming: Display: FlushAsyncLoading(1): 1 QueuedPackages, 0 AsyncPackages
|
||||||
|
[2026.07.02-15.26.53:430][ 0]LogTextureEncodingSettings: Display: Texture Encode Speed: FinalIfAvailable (editor).
|
||||||
|
[2026.07.02-15.26.53:430][ 0]LogTextureEncodingSettings: Display: Oodle Texture Encode Speed settings: Fast: RDO Off Lambda=0, Effort=Normal Final: RDO Off Lambda=0, Effort=Normal
|
||||||
|
[2026.07.02-15.26.53:430][ 0]LogTextureEncodingSettings: Display: Shared linear texture encoding: Disabled
|
||||||
|
[2026.07.02-15.26.53:446][ 0]LogTurnkeySupport: Turnkey Platform: Android: (Status=Valid, MinAllowed_Sdk=r27c, MaxAllowed_Sdk=r28c, Current_Sdk=r27c, Allowed_AutoSdk=r27c, Current_AutoSdk=, Flags="InstalledSdk_ValidVersionExists, Support_FullSdk, Sdk_HasBestVersion")
|
||||||
|
[2026.07.02-15.26.53:446][ 0]LogTurnkeySupport: Turnkey Platform: Win64: (Status=Valid, MinAllowed_Sdk=10.0.19041.0, MaxAllowed_Sdk=10.9.99999.0, Current_Sdk=10.0.22621.0, Allowed_AutoSdk=10.0.22621.0, Current_AutoSdk=, Flags="InstalledSdk_ValidVersionExists, Sdk_HasBestVersion")
|
||||||
|
[2026.07.02-15.26.53:448][ 0]LogTurnkeySupport: Running Turnkey device detection: ' -ScriptsForProject="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" Turnkey -utf8output -WaitForUATMutex -command=VerifySdk -ReportFilename="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyReport_1.log" -log="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyLog_1.log" -project="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" -Device=Win64@ASTERION_VR_01'
|
||||||
|
[2026.07.02-15.26.53:448][ 0]LogMonitoredProcess: Running Serialized UAT: [ cmd.exe /c ""C:/Program Files/Epic Games/UE_5.7/Engine/Build/BatchFiles/RunUAT.bat" -ScriptsForProject="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" Turnkey -utf8output -WaitForUATMutex -command=VerifySdk -ReportFilename="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyReport_1.log" -log="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/Intermediate/TurnkeyLog_1.log" -project="C:/ASTERION/GIT/PS_ReplaySystem/PS_Replay/PS_Replay.uproject" -Device=Win64@ASTERION_VR_01" -nocompile -nocompileuat ]
|
||||||
|
[2026.07.02-15.26.53:498][ 0]LogStreaming: Display: Flushing package /Engine/Functions/Engine_MaterialFunctions01/Shading/PowerToRoughness (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/DefaultTextMaterialOpaque (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:498][ 0]LogStreaming: Display: Package /Engine/EngineMaterials/DefaultTextMaterialOpaque is adding a dynamic import to package /Engine/Functions/Engine_MaterialFunctions01/Shading/PowerToRoughness because of a recursive sync load
|
||||||
|
[2026.07.02-15.26.53:499][ 0]LogStreaming: Display: Flushing package /Engine/Functions/Engine_MaterialFunctions01/Shading/PowerToRoughness (state: DeferredPostLoad) recursively from another package /Engine/EngineMaterials/DefaultTextMaterialOpaque (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:499][ 0]LogStreaming: Display: Flushing package /Engine/Functions/Engine_MaterialFunctions01/Shading/ConvertFromDiffSpec (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/DefaultTextMaterialOpaque (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:501][ 0]LogStreaming: Display: Package /Engine/EngineMaterials/DefaultTextMaterialOpaque is adding a dynamic import to package /Engine/Functions/Engine_MaterialFunctions01/Shading/ConvertFromDiffSpec because of a recursive sync load
|
||||||
|
[2026.07.02-15.26.53:501][ 0]LogStreaming: Display: Flushing package /Engine/Functions/Engine_MaterialFunctions01/Shading/ConvertFromDiffSpec (state: DeferredPostLoad) recursively from another package /Engine/EngineMaterials/DefaultTextMaterialOpaque (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:502][ 0]LogStreaming: Display: Flushing package /Engine/EngineMaterials/WorldGridMaterial (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/DefaultTextMaterialOpaque (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:508][ 0]LogStreaming: Display: Flushing package /Engine/EngineMaterials/DefaultDeferredDecalMaterial (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/WorldGridMaterial (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:510][ 0]LogStreaming: Display: Flushing package /Engine/EngineMaterials/DefaultLightFunctionMaterial (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/DefaultDeferredDecalMaterial (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:511][ 0]LogStreaming: Display: Flushing package /Engine/EngineMaterials/DefaultPostProcessMaterial (state: WaitingForIo) recursively from another package /Engine/EngineMaterials/DefaultLightFunctionMaterial (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.26.53:515][ 0]LogStreaming: Display: Package /Engine/EngineMaterials/DefaultLightFunctionMaterial is adding a dynamic import to package /Engine/EngineMaterials/DefaultPostProcessMaterial because of a recursive sync load
|
||||||
|
[2026.07.02-15.26.53:515][ 0]LogStreaming: Display: Flushing package /Engine/EngineMaterials/DefaultPostProcessMaterial (state: DeferredPostLoad) recursively from another package /Engine/EngineMaterials/DefaultLightFunctionMaterial (state: CreateLinkerLoadExports) will result in a partially loaded package to avoid a deadlock.
|
||||||
|
[2026.07.02-15.27.08:258][ 0]LogTurnkeySupport: Completed device detection: Code = 0
|
||||||
3
Saved/UnrealBuildTool/BuildConfiguration.xml
Normal file
3
Saved/UnrealBuildTool/BuildConfiguration.xml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
|
||||||
|
</Configuration>
|
||||||
15
Source/PS_Replay.Target.cs
Normal file
15
Source/PS_Replay.Target.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class PS_ReplayTarget : TargetRules
|
||||||
|
{
|
||||||
|
public PS_ReplayTarget(TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Game;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V6;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
|
||||||
|
ExtraModuleNames.Add("PS_Replay");
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Source/PS_Replay/PS_Replay.Build.cs
Normal file
23
Source/PS_Replay/PS_Replay.Build.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
public class PS_Replay : ModuleRules
|
||||||
|
{
|
||||||
|
public PS_Replay(ReadOnlyTargetRules Target) : base(Target)
|
||||||
|
{
|
||||||
|
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||||
|
|
||||||
|
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" });
|
||||||
|
|
||||||
|
PrivateDependencyModuleNames.AddRange(new string[] { });
|
||||||
|
|
||||||
|
// Uncomment if you are using Slate UI
|
||||||
|
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
|
||||||
|
|
||||||
|
// Uncomment if you are using online features
|
||||||
|
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
|
||||||
|
|
||||||
|
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
|
||||||
|
}
|
||||||
|
}
|
||||||
6
Source/PS_Replay/PS_Replay.cpp
Normal file
6
Source/PS_Replay/PS_Replay.cpp
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "PS_Replay.h"
|
||||||
|
#include "Modules/ModuleManager.h"
|
||||||
|
|
||||||
|
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, PS_Replay, "PS_Replay" );
|
||||||
6
Source/PS_Replay/PS_Replay.h
Normal file
6
Source/PS_Replay/PS_Replay.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
|
||||||
15
Source/PS_ReplayEditor.Target.cs
Normal file
15
Source/PS_ReplayEditor.Target.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class PS_ReplayEditorTarget : TargetRules
|
||||||
|
{
|
||||||
|
public PS_ReplayEditorTarget( TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Editor;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V6;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
|
||||||
|
ExtraModuleNames.Add("PS_Replay");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user