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);
}

View File

@ -42,6 +42,9 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Config")
UDataTable* BathroomDataTable;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Config")
TSubclassOf<AActor> TargetSelectorClass;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Config")
TArray<FString> AlphabetForRandomList;
@ -106,8 +109,6 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Random Mesh")
bool bIsRandomPannel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Random Mesh")
bool bIsRandomRobotPosition;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
@ -119,9 +120,6 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
EQualityEnum CurrentSelectQuality = EQualityEnum::Epic;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<FGoalsTaskData> TaskList;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FGoalsTaskData TempTask;
@ -206,6 +204,9 @@ public:
UFUNCTION(BlueprintCallable)
FParsedData DoJsonParse(const FString& JsonString);
UFUNCTION(BlueprintCallable)
void UpdateTargetSelector();
public:
UFUNCTION(BlueprintCallable)
void SetCurrentFolderName(const FString& FolderName);

View File

@ -0,0 +1,29 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TargetSelector.generated.h"
UCLASS()
class LUCKYROBOTS_API ATargetSelector : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ATargetSelector();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsTracing = true;
};

View File

@ -4,6 +4,7 @@
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "SharedDef.h"
#include "CaptureSettingsUserWidget.generated.h"
/**
@ -14,4 +15,11 @@ class LUCKYROBOTS_API UCaptureSettingsUserWidget : public UUserWidget
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsOpen;
public:
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void BPRefreshTaskList();
};