Optimizing WB_CaptureSettings

This commit is contained in:
martinluckyrobots
2025-04-11 12:41:50 +08:00
parent 7fd533075c
commit 8d20bf761d
18 changed files with 116 additions and 18 deletions

View File

@ -11,6 +11,7 @@
#include "FunctionLibraries/LuckyRobotsFunctionLibrary.h"
#include "VaRestSubsystem.h"
#include "Subsystems/SubsystemBlueprintLibrary.h"
#include "Gameplay/TargetSelector.h"
void ULuckyRobotsGameInstance::DoSendMessage(const FString& SendValue)
{
@ -46,22 +47,22 @@ void ULuckyRobotsGameInstance::SwitchGamePaused()
void ULuckyRobotsGameInstance::ClearTaskList()
{
TaskList.Empty();
CurrentCaptureSettingsData.TaskList.Empty();
}
void ULuckyRobotsGameInstance::AddTask(const FGoalsTaskData& TaskData)
{
TaskList.Add(TaskData);
CurrentCaptureSettingsData.TaskList.Add(TaskData);
}
void ULuckyRobotsGameInstance::RemoveTask(const FGoalsTaskData& TaskData)
{
TaskList.Remove(TaskData);
CurrentCaptureSettingsData.TaskList.Remove(TaskData);
}
void ULuckyRobotsGameInstance::RemoveTaskByGoalType(EGoalType GoalType)
{
for (const FGoalsTaskData& Task : TaskList)
for (FGoalsTaskData Task : CurrentCaptureSettingsData.TaskList)
{
if (Task.GoalType == GoalType)
{
@ -73,18 +74,18 @@ void ULuckyRobotsGameInstance::RemoveTaskByGoalType(EGoalType GoalType)
int32 ULuckyRobotsGameInstance::GetTaskNum() const
{
return TaskList.Num();
return CurrentCaptureSettingsData.TaskList.Num();
}
void ULuckyRobotsGameInstance::SetTask(int32 Index, const FGoalsTaskData& TaskData)
{
if (TaskList.IsValidIndex(Index))
if (CurrentCaptureSettingsData.TaskList.IsValidIndex(Index))
{
TaskList[Index] = TaskData;
CurrentCaptureSettingsData.TaskList[Index] = TaskData;
}
else
{
while (TaskList.Num() < Index)
while (CurrentCaptureSettingsData.TaskList.Num() < Index)
{
FGoalsTaskData TempTaskData;
AddTask(TempTaskData);
@ -95,9 +96,9 @@ void ULuckyRobotsGameInstance::SetTask(int32 Index, const FGoalsTaskData& TaskDa
bool ULuckyRobotsGameInstance::GetTask(int32 Index, FGoalsTaskData& OutTaskData) const
{
if (TaskList.IsValidIndex(Index))
if (CurrentCaptureSettingsData.TaskList.IsValidIndex(Index))
{
OutTaskData = TaskList[Index];
OutTaskData = CurrentCaptureSettingsData.TaskList[Index];
return true;
}
return false;
@ -106,19 +107,19 @@ bool ULuckyRobotsGameInstance::GetTask(int32 Index, FGoalsTaskData& OutTaskData)
void ULuckyRobotsGameInstance::ReSetTaskList()
{
TArray<FGoalsTaskData> TempTaskList;
for (FGoalsTaskData& Task : TaskList)
for (FGoalsTaskData& Task : CurrentCaptureSettingsData.TaskList)
{
Task.bIsStart = false;
Task.bIsComplete = false;
Task.bActive = false;
TempTaskList.Add(Task);
}
TaskList = TempTaskList;
CurrentCaptureSettingsData.TaskList = TempTaskList;
}
TArray<FGoalsTaskData> ULuckyRobotsGameInstance::GetTaskList() const
{
return TaskList;
return CurrentCaptureSettingsData.TaskList;
}
void ULuckyRobotsGameInstance::DoSetTempTaskValueChange(bool bIsClear)
@ -379,6 +380,38 @@ FParsedData ULuckyRobotsGameInstance::DoJsonParse(const FString& JsonString)
return ParsedData;
}
void ULuckyRobotsGameInstance::UpdateTargetSelector()
{
TArray<AActor*> AllTargetSelector;
UGameplayStatics::GetAllActorsOfClass(this, ATargetSelector::StaticClass(), AllTargetSelector);
for (auto TargetSelector : AllTargetSelector)
{
if (TargetSelector)
{
TargetSelector->Destroy();
}
}
TArray<FGoalsTaskData> GoalsTaskList = GetTaskList();
for (int i = 0; i < GoalsTaskList.Num() ; ++i)
{
if (GoalsTaskList[i].GoalType == EGoalType::NavigateSimpleEnvironments)
{
if (i == 0)
{
TargetPosition = GoalsTaskList[i].TargetLocation;
}
ATargetSelector* TargetSelector = GetWorld()->SpawnActorDeferred<ATargetSelector>(TargetSelectorClass, GoalsTaskList[i].TargetLocation, nullptr, nullptr,
ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
if (TargetSelector)
{
TargetSelector->FinishSpawning(GoalsTaskList[i].TargetLocation);
TargetSelector->bIsTracing = false;
}
}
}
}
void ULuckyRobotsGameInstance::SetCurrentFolderName(const FString& FolderName)
{
CurrentCaptureSettingsData.FolderName = FText::FromString(FolderName);

View File

@ -0,0 +1,27 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Gameplay/TargetSelector.h"
// Sets default values
ATargetSelector::ATargetSelector()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void ATargetSelector::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ATargetSelector::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}