diff --git a/Content/GameBP/UI/Settings/WB_ObjectListBox1.uasset b/Content/GameBP/UI/Settings/WB_ObjectListBox1.uasset index 6a508c10..fbf6ec17 100644 Binary files a/Content/GameBP/UI/Settings/WB_ObjectListBox1.uasset and b/Content/GameBP/UI/Settings/WB_ObjectListBox1.uasset differ diff --git a/Content/GameBP/UI/Settings/WB_ObjectsListCheckbox.uasset b/Content/GameBP/UI/Settings/WB_ObjectsListCheckbox.uasset index a385d810..c5480daa 100644 Binary files a/Content/GameBP/UI/Settings/WB_ObjectsListCheckbox.uasset and b/Content/GameBP/UI/Settings/WB_ObjectsListCheckbox.uasset differ diff --git a/Content/GameBP/UI/Settings/WB_SelectGoalMenu.uasset b/Content/GameBP/UI/Settings/WB_SelectGoalMenu.uasset index df9a00ed..4ae37471 100644 Binary files a/Content/GameBP/UI/Settings/WB_SelectGoalMenu.uasset and b/Content/GameBP/UI/Settings/WB_SelectGoalMenu.uasset differ diff --git a/Content/GameBP/UI/Settings/WB_TaskListBox.uasset b/Content/GameBP/UI/Settings/WB_TaskListBox.uasset index 0731e8c8..cbceb3d2 100644 Binary files a/Content/GameBP/UI/Settings/WB_TaskListBox.uasset and b/Content/GameBP/UI/Settings/WB_TaskListBox.uasset differ diff --git a/Source/LuckyWorldV2/Private/UI/Settings/ObjectsListUserWidget.cpp b/Source/LuckyWorldV2/Private/UI/Settings/ObjectsListUserWidget.cpp index 12798d17..ca0f90af 100644 --- a/Source/LuckyWorldV2/Private/UI/Settings/ObjectsListUserWidget.cpp +++ b/Source/LuckyWorldV2/Private/UI/Settings/ObjectsListUserWidget.cpp @@ -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(SelectableItemData.Icon.Get()); + if (LoadedTexture) + { + UpdateIcon(LoadedTexture); + SetVisibility(ESlateVisibility::Visible); + } +} + +void UObjectsListUserWidget::DoUpdateChecked() +{ + ULuckyRobotsGameInstance* GameInstance = Cast(GetGameInstance()); + if (GameInstance) + { + bIsChecked = GameInstance->GetCurrentRandomMeshes().Find(SelectableItemData.Mesh) >= 0; + } + + DoDisplayChecked(); +} + +void UObjectsListUserWidget::ToggleChecked() +{ + ULuckyRobotsGameInstance* GameInstance = Cast(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(); +} \ No newline at end of file diff --git a/Source/LuckyWorldV2/Public/UI/Settings/ObjectsListUserWidget.h b/Source/LuckyWorldV2/Public/UI/Settings/ObjectsListUserWidget.h index 242c50a0..a33066bc 100644 --- a/Source/LuckyWorldV2/Public/UI/Settings/ObjectsListUserWidget.h +++ b/Source/LuckyWorldV2/Public/UI/Settings/ObjectsListUserWidget.h @@ -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(); };