lyra_game_ue/Source/LyraGame/Replays/AsyncAction_QueryReplays.cpp
Goran Lazarevski 3bcab085f8 Initial commit
2025-03-20 11:06:26 +01:00

60 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Replays/AsyncAction_QueryReplays.h"
#include "GameFramework/PlayerController.h"
#include "LyraReplaySubsystem.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(AsyncAction_QueryReplays)
UAsyncAction_QueryReplays::UAsyncAction_QueryReplays(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
UAsyncAction_QueryReplays* UAsyncAction_QueryReplays::QueryReplays(APlayerController* InPlayerController)
{
UAsyncAction_QueryReplays* Action = nullptr;
if (InPlayerController != nullptr)
{
Action = NewObject<UAsyncAction_QueryReplays>();
Action->PlayerController = InPlayerController;
}
return Action;
}
void UAsyncAction_QueryReplays::Activate()
{
ReplayStreamer = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
ResultList = NewObject<ULyraReplayList>();
if (ReplayStreamer.IsValid())
{
FNetworkReplayVersion EnumerateStreamsVersion = FNetworkVersion::GetReplayVersion();
ReplayStreamer->EnumerateStreams(EnumerateStreamsVersion, INDEX_NONE, FString(), TArray<FString>(), FEnumerateStreamsCallback::CreateUObject(this, &ThisClass::OnEnumerateStreamsComplete));
}
else
{
QueryComplete.Broadcast(ResultList);
}
}
void UAsyncAction_QueryReplays::OnEnumerateStreamsComplete(const FEnumerateStreamsResult& Result)
{
for (const FNetworkReplayStreamInfo& StreamInfo : Result.FoundStreams)
{
ULyraReplayListEntry* NewReplayEntry = NewObject<ULyraReplayListEntry>(ResultList);
NewReplayEntry->StreamInfo = StreamInfo;
ResultList->Results.Add(NewReplayEntry);
}
// Sort demo names by date
Algo::SortBy(ResultList->Results, [](const TObjectPtr<ULyraReplayListEntry>& Data) { return Data->StreamInfo.Timestamp.GetTicks(); }, TGreater<>());
QueryComplete.Broadcast(ResultList);
}