Optimizing the code

This commit is contained in:
martinluckyrobots 2025-04-21 11:19:58 +08:00
parent aa363ac736
commit df872258a6
6 changed files with 84 additions and 1 deletions

View File

@ -2,4 +2,66 @@
#include "UI/Settings/ObjectsListUserWidget.h"
#include "Engine/StreamableManager.h"
#include "Engine/AssetManager.h"
#include "Engine/Texture2D.h"
#include "Core/LuckyRobotsGameInstance.h"
void UObjectsListUserWidget::NativeConstruct()
{
Super::NativeConstruct();
SelectableItemData.Icon;
SetVisibility(ESlateVisibility::Collapsed);
if (!SelectableItemData.Icon.IsNull())
{
FStreamableManager& Streamable = UAssetManager::GetStreamableManager();
Streamable.RequestAsyncLoad(SelectableItemData.Icon.ToSoftObjectPath(),
FStreamableDelegate::CreateUObject(this, &UObjectsListUserWidget::OnIconLoaded));
}
DoUpdateChecked();
}
void UObjectsListUserWidget::OnIconLoaded()
{
UTexture2D* LoadedTexture = Cast<UTexture2D>(SelectableItemData.Icon.Get());
if (LoadedTexture)
{
UpdateIcon(LoadedTexture);
SetVisibility(ESlateVisibility::Visible);
}
}
void UObjectsListUserWidget::DoUpdateChecked()
{
ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (GameInstance)
{
bIsChecked = GameInstance->GetCurrentRandomMeshes().Find(SelectableItemData.Mesh) >= 0;
}
DoDisplayChecked();
}
void UObjectsListUserWidget::ToggleChecked()
{
ULuckyRobotsGameInstance* GameInstance = Cast<ULuckyRobotsGameInstance>(GetGameInstance());
if (GameInstance)
{
if (GameInstance->GetCurrentRandomMeshes().Find(SelectableItemData.Mesh) >= 0)
{
GameInstance->CurrentCaptureSettingsData.RandomMeshes.Remove(SelectableItemData.Mesh);
}
else
{
GameInstance->CurrentCaptureSettingsData.RandomMeshes.Add(SelectableItemData.Mesh);
}
GameInstance->OnRandomMeshesUpdated.Broadcast();
}
DoUpdateChecked();
}

View File

@ -14,8 +14,29 @@ UCLASS()
class LUCKYWORLDV2_API UObjectsListUserWidget : public UUserWidget
{
GENERATED_BODY()
protected:
virtual void NativeConstruct() override;
void OnIconLoaded();
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsChecked;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FSelectableItemData SelectableItemData;
public:
UFUNCTION(BlueprintCallable)
void DoUpdateChecked();
UFUNCTION(BlueprintCallable)
void ToggleChecked();
public:
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void UpdateIcon(UTexture2D* Image);
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void DoDisplayChecked();
};