LuckyWorldV2/Source/Luckyrobots/Private/FunctionLibraries/LuckyRobotsFunctionLibrary.cpp
martinluckyrobots 4d4026d9ad Optimize code to unreal style
2025-04-07 11:32:45 +08:00

126 lines
4.1 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "FunctionLibraries/LuckyRobotsFunctionLibrary.h"
#include "Core/LuckyRobotsGameInstance.h"
#include "GameFramework/GameUserSettings.h"
#include "Kismet/GameplayStatics.h"
#include "Settings/SG_CaptureSetting.h"
ULuckyRobotsGameInstance* ULuckyRobotsFunctionLibrary::GetLuckyRobotsGameInstance(const UObject* WorldContextObject)
{
if (WorldContextObject && WorldContextObject->GetWorld())
{
return Cast<ULuckyRobotsGameInstance>(WorldContextObject->GetWorld()->GetGameInstance());
}
return nullptr;
}
TArray<FRobotData> ULuckyRobotsFunctionLibrary::GetActiveRobotDataList(const UObject* WorldContextObject)
{
TArray<FRobotData> RobotDataList;
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
if (GameInstance->RobotDataDataTable)
{
FString ContextString;
TArray<FName> RowNames = GameInstance->RobotDataDataTable->GetRowNames();
for (const FName& RowName : RowNames)
{
FRobotData* pRow = GameInstance->RobotDataDataTable->FindRow<FRobotData>(RowName, ContextString);
if (pRow && pRow->bActive)
{
RobotDataList.Add(*pRow);
}
}
}
}
return RobotDataList;
}
TArray<FLevelData> ULuckyRobotsFunctionLibrary::GetActiveLevelDataList(const UObject* WorldContextObject)
{
TArray<FLevelData> LevelDataList;
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
if (GameInstance->LevelDataTable)
{
FString ContextString;
TArray<FName> RowNames = GameInstance->LevelDataTable->GetRowNames();
for (const FName& RowName : RowNames)
{
FLevelData* pRow = GameInstance->LevelDataTable->FindRow<FLevelData>(RowName, ContextString);
if (pRow && pRow->bActive)
{
LevelDataList.Add(*pRow);
}
}
}
}
return LevelDataList;
}
void ULuckyRobotsFunctionLibrary::UpdateQualitySettings(const UObject* WorldContextObject)
{
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
if (UGameUserSettings* GameUserSettings = GEngine->GetGameUserSettings())
{
GameUserSettings->SetOverallScalabilityLevel(static_cast<int32>(GameInstance->CurrentSelectQuality));
GameUserSettings->SaveSettings();
GameUserSettings->ApplySettings(true);
}
}
}
FCaptureSettingsData ULuckyRobotsFunctionLibrary::LoadCaptureSettings(const UObject* WorldContextObject)
{
FCaptureSettingsData DefaultCaptureSetting;
DefaultCaptureSetting.FolderName = FText::FromString("robotdata");
DefaultCaptureSetting.FileName = FText::FromString("FILE");
DefaultCaptureSetting.WritesPerSec = FText::FromString("1");
DefaultCaptureSetting.NumberOfPeople = FText::FromString("1");
DefaultCaptureSetting.NumberOfObjects = FText::FromString("1");
DefaultCaptureSetting.NumberOfCaptures = FText::FromString("1");
USG_CaptureSetting* SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::LoadGameFromSlot("SGCaptureSettings", 0));
if (SaveGame)
{
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
GameInstance->CurrentCaptureSettingsData = SaveGame->CaptureSetting;
}
return SaveGame->CaptureSetting;
}
else
{
SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::CreateSaveGameObject(USG_CaptureSetting::StaticClass()));
if (SaveGame)
{
SaveGame->CaptureSetting = DefaultCaptureSetting;
UGameplayStatics::SaveGameToSlot(SaveGame, "SGCaptureSettings", 0);
}
}
return DefaultCaptureSetting;
}
void ULuckyRobotsFunctionLibrary::SaveCaptureSettings(const UObject* WorldContextObject, FCaptureSettingsData CaptureSetting)
{
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
GameInstance->CurrentCaptureSettingsData = CaptureSetting;
}
USG_CaptureSetting* SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::LoadGameFromSlot("SGCaptureSettings", 0));
if (!SaveGame)
{
SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::CreateSaveGameObject(USG_CaptureSetting::StaticClass()));
}
if (SaveGame)
{
SaveGame->CaptureSetting = CaptureSetting;
UGameplayStatics::SaveGameToSlot(SaveGame, "SGCaptureSettings", 0);
}
}