Optimize code to unreal style

This commit is contained in:
martinluckyrobots
2025-04-07 11:32:45 +08:00
parent 5d8e225db5
commit 4d4026d9ad
19 changed files with 306 additions and 315 deletions

View File

@ -5,19 +5,18 @@
#include "GameModes/LuckyRobotsGameState.h"
#include "Kismet/GameplayStatics.h"
#include "UI/GameUserWidget.h"
#include "Kismet/KismetSystemLibrary.h"
void ULuckyRobotsGameInstance::DoSendMessage(FString SendValue)
void ULuckyRobotsGameInstance::DoSendMessage(const FString& SendValue)
{
ALuckyRobotsGameState* LuckyRobotsGameState = Cast<ALuckyRobotsGameState>(UGameplayStatics::GetGameState(this));
if (LuckyRobotsGameState)
if (ALuckyRobotsGameState* GameState = Cast<ALuckyRobotsGameState>(UGameplayStatics::GetGameState(this)))
{
LuckyRobotsGameState->DoSendMessage(SendValue);
GameState->DoSendMessage(SendValue);
}
DoLogItemAdd("Receive", SendValue, ELogItemType::Debug);
DoLogItemAdd(TEXT("Receive"), SendValue, ELogItemType::Debug);
}
void ULuckyRobotsGameInstance::DoLogItemAdd(FString Topic, FString MsgText, ELogItemType LogItemType)
void ULuckyRobotsGameInstance::DoLogItemAdd(const FString& Topic, const FString& MsgText, ELogItemType LogItemType)
{
if (GameUserWidget)
{
@ -27,15 +26,16 @@ void ULuckyRobotsGameInstance::DoLogItemAdd(FString Topic, FString MsgText, ELog
void ULuckyRobotsGameInstance::SwitchGamePaused()
{
UGameplayStatics::SetGamePaused(this, !UGameplayStatics::IsGamePaused(this));
bool bPaused = UGameplayStatics::IsGamePaused(this);
UGameplayStatics::SetGamePaused(this, !bPaused);
if (UGameplayStatics::IsGamePaused(this))
if (!bPaused)
{
UKismetSystemLibrary::ExecuteConsoleCommand(this, "r.SceneRendering 0");
UKismetSystemLibrary::ExecuteConsoleCommand(this, TEXT("r.SceneRendering 0"));
}
else
{
UKismetSystemLibrary::ExecuteConsoleCommand(this, "r.SceneRendering 1");
UKismetSystemLibrary::ExecuteConsoleCommand(this, TEXT("r.SceneRendering 1"));
}
}
@ -44,18 +44,19 @@ void ULuckyRobotsGameInstance::ClearTaskList()
TaskList.Empty();
}
void ULuckyRobotsGameInstance::AddTask(FGoalsTaskData TaskData)
void ULuckyRobotsGameInstance::AddTask(const FGoalsTaskData& TaskData)
{
TaskList.Add(TaskData);
}
void ULuckyRobotsGameInstance::RemoveTask(FGoalsTaskData TaskData)
void ULuckyRobotsGameInstance::RemoveTask(const FGoalsTaskData& TaskData)
{
TaskList.Remove(TaskData);
}
void ULuckyRobotsGameInstance::RemoveTaskByGoalType(EGoalType GoalType)
{
for (auto Task : TaskList)
for (const FGoalsTaskData& Task : TaskList)
{
if (Task.GoalType == GoalType)
{
@ -65,12 +66,12 @@ void ULuckyRobotsGameInstance::RemoveTaskByGoalType(EGoalType GoalType)
}
}
int ULuckyRobotsGameInstance::GetTaskNum()
int32 ULuckyRobotsGameInstance::GetTaskNum() const
{
return TaskList.Num();
}
void ULuckyRobotsGameInstance::SetTask(int Index, FGoalsTaskData TaskData)
void ULuckyRobotsGameInstance::SetTask(int32 Index, const FGoalsTaskData& TaskData)
{
if (TaskList.IsValidIndex(Index))
{
@ -78,7 +79,7 @@ void ULuckyRobotsGameInstance::SetTask(int Index, FGoalsTaskData TaskData)
}
else
{
for (int i = TaskList.Num(); i < Index; i++)
while (TaskList.Num() < Index)
{
FGoalsTaskData TempTaskData;
AddTask(TempTaskData);
@ -87,39 +88,37 @@ void ULuckyRobotsGameInstance::SetTask(int Index, FGoalsTaskData TaskData)
}
}
bool ULuckyRobotsGameInstance::GetTask(int Index, FGoalsTaskData& TaskData)
bool ULuckyRobotsGameInstance::GetTask(int32 Index, FGoalsTaskData& OutTaskData) const
{
if (TaskList.IsValidIndex(Index))
{
TaskData = TaskList[Index];
OutTaskData = TaskList[Index];
return true;
}
return false;
}
void ULuckyRobotsGameInstance::ReSetTaskList()
{
TArray<FGoalsTaskData> TempTaskList;
for (auto Task : TaskList)
for (FGoalsTaskData& Task : TaskList)
{
Task.bIsStart = false;
Task.bIsStart = false;
Task.bIsComplete = false;
Task.bActive = false;
TempTaskList.Add(Task);
}
TaskList = TempTaskList;
}
TArray<FGoalsTaskData> ULuckyRobotsGameInstance::GetTaskList()
TArray<FGoalsTaskData> ULuckyRobotsGameInstance::GetTaskList() const
{
return TaskList;
}
void ULuckyRobotsGameInstance::DoSetTempTaskValueChange(bool IsClear)
void ULuckyRobotsGameInstance::DoSetTempTaskValueChange(bool bIsClear)
{
if (IsClear)
if (bIsClear)
{
ClearTaskList();
}
@ -134,133 +133,162 @@ void ULuckyRobotsGameInstance::DoSetTempTaskValueChange(bool IsClear)
}
}
void ULuckyRobotsGameInstance::SetCurrentFolderName(FString FolderName)
void ULuckyRobotsGameInstance::SetCurrentFolderName(const FString& FolderName)
{
CurrentCaptureSettingsData.FolderName = FText::FromString(FolderName);
}
void ULuckyRobotsGameInstance::SetCurrentFileName(FString FileName)
void ULuckyRobotsGameInstance::SetCurrentFileName(const FString& FileName)
{
CurrentCaptureSettingsData.FileName = FText::FromString(FileName);
}
void ULuckyRobotsGameInstance::SetCurrentWritesPerSec(int WritesPerSec)
void ULuckyRobotsGameInstance::SetCurrentWritesPerSec(int32 WritesPerSec)
{
CurrentCaptureSettingsData.WritesPerSec = FText::FromString(FString::FromInt(WritesPerSec));
}
void ULuckyRobotsGameInstance::SetCurrentIsScenario(bool IsScenario)
{
CurrentCaptureSettingsData.IsScenario = IsScenario;
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomLight(bool bLight)
{
CurrentCaptureSettingsData.bLight = bLight;
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomMaterials(bool bMaterials)
{
CurrentCaptureSettingsData.bMaterials = bMaterials;
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomRobotPosition(bool bRobotPosition)
{
CurrentCaptureSettingsData.bRobotPosition = bRobotPosition;
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomPets(bool bPets)
{
CurrentCaptureSettingsData.bPets = bPets;
}
void ULuckyRobotsGameInstance::SetCurrentPetsNumber(int PetsNumber)
void ULuckyRobotsGameInstance::SetCurrentPetsNumber(int32 PetsNumber)
{
CurrentCaptureSettingsData.NumberOfPets = FText::FromString(FString::FromInt(PetsNumber));
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomPeople(bool bPeople)
{
CurrentCaptureSettingsData.bPeople = bPeople;
}
void ULuckyRobotsGameInstance::SetCurrentPeopleNumber(int PeopleNumber)
void ULuckyRobotsGameInstance::SetCurrentPeopleNumber(int32 PeopleNumber)
{
CurrentCaptureSettingsData.NumberOfPeople = FText::FromString(FString::FromInt(PeopleNumber));
}
void ULuckyRobotsGameInstance::SetCurrentIsRandomObjects(bool bObjects)
{
CurrentCaptureSettingsData.bObjects = bObjects;
}
void ULuckyRobotsGameInstance::SetCurrentObjectsNumber(int ObjectsNumber)
void ULuckyRobotsGameInstance::SetCurrentObjectsNumber(int32 ObjectsNumber)
{
CurrentCaptureSettingsData.NumberOfObjects = FText::FromString(FString::FromInt(ObjectsNumber));
}
void ULuckyRobotsGameInstance::SetCurrentRandomMeshes(TArray<TSoftObjectPtr<UStaticMeshComponent>> RandomMeshes)
void ULuckyRobotsGameInstance::SetCurrentRandomMeshes(const TArray<TSoftObjectPtr<UStaticMeshComponent>>& RandomMeshes)
{
CurrentCaptureSettingsData.RandomMeshes = RandomMeshes;
}
void ULuckyRobotsGameInstance::SetCurrentIsInfiniteCapture(bool bInfiniteCapture)
{
CurrentCaptureSettingsData.bInfiniteCapture = bInfiniteCapture;
}
void ULuckyRobotsGameInstance::SetCurrentCaptureNumber(int CaptureNumber)
void ULuckyRobotsGameInstance::SetCurrentCaptureNumber(int32 CaptureNumber)
{
CurrentCaptureSettingsData.NumberOfCaptures = FText::FromString(FString::FromInt(CaptureNumber));
}
FString ULuckyRobotsGameInstance::GetCurrentFolderName()
FString ULuckyRobotsGameInstance::GetCurrentFolderName() const
{
return CurrentCaptureSettingsData.FolderName.ToString();
}
FString ULuckyRobotsGameInstance::GetCurrentFileName()
FString ULuckyRobotsGameInstance::GetCurrentFileName() const
{
return CurrentCaptureSettingsData.FileName.ToString();
}
int ULuckyRobotsGameInstance::GetCurrentWritesPerSec()
int32 ULuckyRobotsGameInstance::GetCurrentWritesPerSec() const
{
return FCString::Atoi(*(CurrentCaptureSettingsData.WritesPerSec.ToString()));
return FCString::Atoi(*CurrentCaptureSettingsData.WritesPerSec.ToString());
}
bool ULuckyRobotsGameInstance::GetCurrentIsScenario()
bool ULuckyRobotsGameInstance::GetCurrentIsScenario() const
{
return CurrentCaptureSettingsData.IsScenario;
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomLight()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomLight() const
{
return CurrentCaptureSettingsData.bLight;
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomMaterials()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomMaterials() const
{
return CurrentCaptureSettingsData.bMaterials;
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomRobotPosition()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomRobotPosition() const
{
return CurrentCaptureSettingsData.bRobotPosition;
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomPets()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomPets() const
{
return CurrentCaptureSettingsData.bPets;
}
int ULuckyRobotsGameInstance::GetCurrentPetsNumber()
int32 ULuckyRobotsGameInstance::GetCurrentPetsNumber() const
{
return FCString::Atoi(*(CurrentCaptureSettingsData.NumberOfPets.ToString()));
return FCString::Atoi(*CurrentCaptureSettingsData.NumberOfPets.ToString());
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomPeople()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomPeople() const
{
return CurrentCaptureSettingsData.bPeople;
}
int ULuckyRobotsGameInstance::GetCurrentPeopleNumber()
int32 ULuckyRobotsGameInstance::GetCurrentPeopleNumber() const
{
return FCString::Atoi(*(CurrentCaptureSettingsData.NumberOfPeople.ToString()));
return FCString::Atoi(*CurrentCaptureSettingsData.NumberOfPeople.ToString());
}
bool ULuckyRobotsGameInstance::GetCurrentIsRandomObjects()
bool ULuckyRobotsGameInstance::GetCurrentIsRandomObjects() const
{
return CurrentCaptureSettingsData.bObjects;
}
int ULuckyRobotsGameInstance::GetCurrentObjectsNumber()
int32 ULuckyRobotsGameInstance::GetCurrentObjectsNumber() const
{
return FCString::Atoi(*(CurrentCaptureSettingsData.NumberOfObjects.ToString()));
return FCString::Atoi(*CurrentCaptureSettingsData.NumberOfObjects.ToString());
}
TArray<TSoftObjectPtr<UStaticMeshComponent>> ULuckyRobotsGameInstance::GetCurrentRandomMeshes()
TArray<TSoftObjectPtr<UStaticMeshComponent>> ULuckyRobotsGameInstance::GetCurrentRandomMeshes() const
{
return CurrentCaptureSettingsData.RandomMeshes;
}
bool ULuckyRobotsGameInstance::GetCurrentIsInfiniteCapture()
bool ULuckyRobotsGameInstance::GetCurrentIsInfiniteCapture() const
{
return CurrentCaptureSettingsData.bInfiniteCapture;
}
int ULuckyRobotsGameInstance::GetCurrentCaptureNumber()
int32 ULuckyRobotsGameInstance::GetCurrentCaptureNumber() const
{
return FCString::Atoi(*(CurrentCaptureSettingsData.NumberOfCaptures.ToString()));
}
return FCString::Atoi(*CurrentCaptureSettingsData.NumberOfCaptures.ToString());
}

View File

@ -9,28 +9,28 @@
ULuckyRobotsGameInstance* ULuckyRobotsFunctionLibrary::GetLuckyRobotsGameInstance(const UObject* WorldContextObject)
{
return Cast<ULuckyRobotsGameInstance>(WorldContextObject->GetWorld()->GetGameInstance());
if (WorldContextObject && WorldContextObject->GetWorld())
{
return Cast<ULuckyRobotsGameInstance>(WorldContextObject->GetWorld()->GetGameInstance());
}
return nullptr;
}
TArray<FRobotData> ULuckyRobotsFunctionLibrary::GetActiveRobotDataList(const UObject* WorldContextObject)
{
TArray<FRobotData> RobotDataList;
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = GetLuckyRobotsGameInstance(WorldContextObject);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
if (LuckyRobotsGameInstance->RobotDataDataTable)
if (GameInstance->RobotDataDataTable)
{
FString ContextString;
TArray<FName> RowNames = LuckyRobotsGameInstance->RobotDataDataTable->GetRowNames();
for (auto RowString : RowNames)
TArray<FName> RowNames = GameInstance->RobotDataDataTable->GetRowNames();
for (const FName& RowName : RowNames)
{
FRobotData* pRow = LuckyRobotsGameInstance->RobotDataDataTable->FindRow<FRobotData>(FName(RowString), ContextString);
if (pRow)
FRobotData* pRow = GameInstance->RobotDataDataTable->FindRow<FRobotData>(RowName, ContextString);
if (pRow && pRow->bActive)
{
if (pRow->bActive)
{
RobotDataList.Add(*pRow);
}
RobotDataList.Add(*pRow);
}
}
}
@ -41,22 +41,18 @@ TArray<FRobotData> ULuckyRobotsFunctionLibrary::GetActiveRobotDataList(const UOb
TArray<FLevelData> ULuckyRobotsFunctionLibrary::GetActiveLevelDataList(const UObject* WorldContextObject)
{
TArray<FLevelData> LevelDataList;
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = GetLuckyRobotsGameInstance(WorldContextObject);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
if (LuckyRobotsGameInstance->LevelDataTable)
if (GameInstance->LevelDataTable)
{
FString ContextString;
TArray<FName> RowNames = LuckyRobotsGameInstance->LevelDataTable->GetRowNames();
for (auto RowString : RowNames)
TArray<FName> RowNames = GameInstance->LevelDataTable->GetRowNames();
for (const FName& RowName : RowNames)
{
FLevelData* pRow = LuckyRobotsGameInstance->LevelDataTable->FindRow<FLevelData>(FName(RowString), ContextString);
if (pRow)
FLevelData* pRow = GameInstance->LevelDataTable->FindRow<FLevelData>(RowName, ContextString);
if (pRow && pRow->bActive)
{
if (pRow->bActive)
{
LevelDataList.Add(*pRow);
}
LevelDataList.Add(*pRow);
}
}
}
@ -66,14 +62,11 @@ TArray<FLevelData> ULuckyRobotsFunctionLibrary::GetActiveLevelDataList(const UOb
void ULuckyRobotsFunctionLibrary::UpdateQualitySettings(const UObject* WorldContextObject)
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = GetLuckyRobotsGameInstance(WorldContextObject);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
// Load game user settings and apply
UGameUserSettings* GameUserSettings = GEngine->GetGameUserSettings();
if (GameUserSettings)
if (UGameUserSettings* GameUserSettings = GEngine->GetGameUserSettings())
{
GameUserSettings->SetOverallScalabilityLevel(int(LuckyRobotsGameInstance->CurrentSelectQuality));
GameUserSettings->SetOverallScalabilityLevel(static_cast<int32>(GameInstance->CurrentSelectQuality));
GameUserSettings->SaveSettings();
GameUserSettings->ApplySettings(true);
}
@ -90,14 +83,12 @@ FCaptureSettingsData ULuckyRobotsFunctionLibrary::LoadCaptureSettings(const UObj
DefaultCaptureSetting.NumberOfObjects = FText::FromString("1");
DefaultCaptureSetting.NumberOfCaptures = FText::FromString("1");
USG_CaptureSetting* SaveGame = nullptr;
SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::LoadGameFromSlot("SGCaptureSettings", 0));
USG_CaptureSetting* SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::LoadGameFromSlot("SGCaptureSettings", 0));
if (SaveGame)
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = GetLuckyRobotsGameInstance(WorldContextObject);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
LuckyRobotsGameInstance->CurrentCaptureSettingsData = SaveGame->CaptureSetting;
GameInstance->CurrentCaptureSettingsData = SaveGame->CaptureSetting;
}
return SaveGame->CaptureSetting;
}
@ -116,22 +107,19 @@ FCaptureSettingsData ULuckyRobotsFunctionLibrary::LoadCaptureSettings(const UObj
void ULuckyRobotsFunctionLibrary::SaveCaptureSettings(const UObject* WorldContextObject, FCaptureSettingsData CaptureSetting)
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = GetLuckyRobotsGameInstance(WorldContextObject);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = GetLuckyRobotsGameInstance(WorldContextObject))
{
LuckyRobotsGameInstance->CurrentCaptureSettingsData = CaptureSetting;
GameInstance->CurrentCaptureSettingsData = CaptureSetting;
}
USG_CaptureSetting* SaveGame = nullptr;
SaveGame = Cast<USG_CaptureSetting>(UGameplayStatics::LoadGameFromSlot("SGCaptureSettings", 0));
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);
}
}
}

View File

@ -8,7 +8,6 @@
void ALuckyRobotsGameMode::BeginPlay()
{
Super::BeginPlay();
ULuckyRobotsFunctionLibrary::UpdateQualitySettings(this);
}
@ -17,24 +16,21 @@ UClass* ALuckyRobotsGameMode::GetDefaultPawnClassForController_Implementation(AC
UClass* RobotClass = Super::GetDefaultPawnClassForController_Implementation(InController);
ERobotsName CurrentRobot = ERobotsName::None;
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
CurrentRobot = LuckyRobotsGameInstance->CurrentSelectRobot;
CurrentRobot = GameInstance->CurrentSelectRobot;
}
if (CurrentRobot != ERobotsName::None)
{
TArray<FRobotData> ActiveRobotDataList = ULuckyRobotsFunctionLibrary::GetActiveRobotDataList(this);
for (auto ActiveRobotData : ActiveRobotDataList)
for (const FRobotData& RobotData : ActiveRobotDataList)
{
if (ActiveRobotData.Name == CurrentRobot)
if (RobotData.Name == CurrentRobot)
{
RobotClass = ActiveRobotData.RobotClass;
RobotClass = RobotData.RobotClass;
break;
}
}
}
return RobotClass;
}

View File

@ -14,7 +14,6 @@ ALuckyRobotsGameState::ALuckyRobotsGameState()
void ALuckyRobotsGameState::BeginPlay()
{
Super::BeginPlay();
if (SocketIOClientComponent)
{
SocketIOClientComponent->Connect(L"http://localhost:3000/");
@ -23,33 +22,25 @@ void ALuckyRobotsGameState::BeginPlay()
void ALuckyRobotsGameState::DoSendMessage(FString SendValue)
{
if (SocketIOClientComponent)
if (SocketIOClientComponent && SocketIOClientComponent->bIsConnected)
{
if (SocketIOClientComponent->bIsConnected)
{
USIOJsonValue* SIOJsonValue = USIOJsonValue::ConstructJsonValueString(this, SendValue);
SocketIOClientComponent->Emit("message", SIOJsonValue);
}
USIOJsonValue* SIOJsonValue = USIOJsonValue::ConstructJsonValueString(this, SendValue);
SocketIOClientComponent->Emit(TEXT("message"), SIOJsonValue);
}
}
void ALuckyRobotsGameState::DoSocketOnConnect(FString SocketId, FString SessionId, bool IsReconnection)
{
if (SocketIOClientComponent)
if (SocketIOClientComponent && SocketIOClientComponent->bIsConnected)
{
if (SocketIOClientComponent->bIsConnected)
{
SocketIOClientComponent->BindEventToGenericEvent("response");
}
SocketIOClientComponent->BindEventToGenericEvent(TEXT("response"));
}
}
void ALuckyRobotsGameState::DoSocketOnGenericEvent(FString EventName, USIOJsonValue* EventData)
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = ULuckyRobotsFunctionLibrary::GetLuckyRobotsGameInstance(this);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = ULuckyRobotsFunctionLibrary::GetLuckyRobotsGameInstance(this))
{
LuckyRobotsGameInstance->DoGetDispatch(EventName, EventData);
GameInstance->DoGetDispatch(EventName, EventData);
}
}
}

View File

@ -9,7 +9,6 @@
void UMainScreenUserWidget::NativeConstruct()
{
Super::NativeConstruct();
InitData();
}
@ -18,132 +17,121 @@ void UMainScreenUserWidget::InitData()
InitRobotData();
InitLevelData();
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
iCurrentSelectQuality = int(LuckyRobotsGameInstance->CurrentSelectQuality);
CurrentQualityIndex = static_cast<int32>(GameInstance->CurrentSelectQuality);
}
}
void UMainScreenUserWidget::InitRobotData()
{
RobotDataList = ULuckyRobotsFunctionLibrary::GetActiveRobotDataList(this);
iCurrentSelectRobot = 0;
CurrentRobotIndex = 0;
UpdateSelectRobot();
}
void UMainScreenUserWidget::InitLevelData()
{
LevelDataList = ULuckyRobotsFunctionLibrary::GetActiveLevelDataList(this);
FRobotData CurrentRobotData = GetCurrentRobotData();
if (CurrentRobotData.Name != ERobotsName::None)
{
TArray<FLevelData> ActiveLevelDataList = LevelDataList;
LevelDataList.Empty();
for (auto ActiveLevelData : ActiveLevelDataList)
TArray<FLevelData> FilteredLevels;
for (const FLevelData& LevelData : LevelDataList)
{
if (ActiveLevelData.RobotTypeList.Find(CurrentRobotData.RobotType) >= 0)
if (LevelData.RobotTypeList.Contains(CurrentRobotData.RobotType))
{
LevelDataList.Add(ActiveLevelData);
FilteredLevels.Add(LevelData);
}
}
LevelDataList = FilteredLevels;
}
iCurrentSelectLevel = 0;
CurrentLevelIndex = 0;
UpdateSelectLevel();
}
FRobotData UMainScreenUserWidget::GetCurrentRobotData()
FRobotData UMainScreenUserWidget::GetCurrentRobotData() const
{
FRobotData CurrentRobotData;
if (RobotDataList.IsValidIndex(iCurrentSelectRobot))
if (RobotDataList.IsValidIndex(CurrentRobotIndex))
{
CurrentRobotData = RobotDataList[iCurrentSelectRobot];
return RobotDataList[CurrentRobotIndex];
}
return CurrentRobotData;
return FRobotData();
}
FLevelData UMainScreenUserWidget::GetCurrentLevelData()
FLevelData UMainScreenUserWidget::GetCurrentLevelData() const
{
FLevelData CurrentLevelData;
if (LevelDataList.IsValidIndex(iCurrentSelectLevel))
if (LevelDataList.IsValidIndex(CurrentLevelIndex))
{
CurrentLevelData = LevelDataList[iCurrentSelectLevel];
return LevelDataList[CurrentLevelIndex];
}
return CurrentLevelData;
return FLevelData();
}
void UMainScreenUserWidget::SelectNextRobot()
{
iCurrentSelectRobot = FMath::Clamp(iCurrentSelectRobot + 1, 0, RobotDataList.Num() - 1);
CurrentRobotIndex = FMath::Clamp(CurrentRobotIndex + 1, 0, RobotDataList.Num() - 1);
UpdateSelectRobot();
}
void UMainScreenUserWidget::SelectPreviousRobot()
{
iCurrentSelectRobot = FMath::Clamp(iCurrentSelectRobot - 1, 0, RobotDataList.Num() - 1);
CurrentRobotIndex = FMath::Clamp(CurrentRobotIndex - 1, 0, RobotDataList.Num() - 1);
UpdateSelectRobot();
}
void UMainScreenUserWidget::SelectNextLevel()
{
iCurrentSelectLevel = FMath::Clamp(iCurrentSelectLevel + 1, 0, LevelDataList.Num() - 1);
CurrentLevelIndex = FMath::Clamp(CurrentLevelIndex + 1, 0, LevelDataList.Num() - 1);
UpdateSelectLevel();
}
void UMainScreenUserWidget::SelectPreviousLevel()
{
iCurrentSelectLevel = FMath::Clamp(iCurrentSelectLevel - 1, 0, LevelDataList.Num() - 1);
CurrentLevelIndex = FMath::Clamp(CurrentLevelIndex - 1, 0, LevelDataList.Num() - 1);
UpdateSelectLevel();
}
void UMainScreenUserWidget::SelectNextQuality()
{
UEnum* QualityEnum = StaticEnum<EQualityEnum>();
int QualityEnumNum = QualityEnum->NumEnums() - 1;
iCurrentSelectQuality = FMath::Clamp(iCurrentSelectQuality - 1, 0, QualityEnumNum - 1);
int32 EnumCount = QualityEnum->NumEnums() - 1;
CurrentQualityIndex = FMath::Clamp(CurrentQualityIndex - 1, 0, EnumCount - 1);
UpdateSelectQuality();
}
void UMainScreenUserWidget::SelectPreviousQuality()
{
UEnum* QualityEnum = StaticEnum<EQualityEnum>();
int QualityEnumNum = QualityEnum->NumEnums() - 1;
iCurrentSelectQuality = FMath::Clamp(iCurrentSelectQuality + 1, 0, QualityEnumNum - 1);
int32 EnumCount = QualityEnum->NumEnums() - 1;
CurrentQualityIndex = FMath::Clamp(CurrentQualityIndex + 1, 0, EnumCount - 1);
UpdateSelectQuality();
}
void UMainScreenUserWidget::UpdateSelectRobot()
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
LuckyRobotsGameInstance->CurrentSelectRobot = GetCurrentRobotData().Name;
GameInstance->CurrentSelectRobot = GetCurrentRobotData().Name;
}
BPUpdateSelectRobot();
InitLevelData();
}
void UMainScreenUserWidget::UpdateSelectLevel()
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
LuckyRobotsGameInstance->CurrentSelectLevel = GetCurrentLevelData().LevelEnum;
GameInstance->CurrentSelectLevel = GetCurrentLevelData().LevelEnum;
}
BPUpdateSelectLevel();
}
void UMainScreenUserWidget::UpdateSelectQuality()
{
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
LuckyRobotsGameInstance->CurrentSelectQuality = static_cast<EQualityEnum>(iCurrentSelectQuality);
GameInstance->CurrentSelectQuality = static_cast<EQualityEnum>(CurrentQualityIndex);
}
BPUpdateSelectQuality();
}
}

View File

@ -2,16 +2,13 @@
#include "UI/GameUserWidget.h"
#include "FunctionLibraries/LuckyRobotsFunctionLibrary.h"
#include "Core/LuckyRobotsGameInstance.h"
void UGameUserWidget::NativeConstruct()
{
Super::NativeConstruct();
ULuckyRobotsGameInstance* LuckyRobotsGameInstance = ULuckyRobotsFunctionLibrary::GetLuckyRobotsGameInstance(this);
if (LuckyRobotsGameInstance)
if (ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance()))
{
LuckyRobotsGameInstance->GameUserWidget = this;
GameInstance->GameUserWidget = this;
}
}
}