// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CommonActivatableWidget.h" #include "Engine/DataAsset.h" #include "XRCreativeToolset.generated.h" DECLARE_LOG_CATEGORY_EXTERN(LogXRCreativeToolset, Log, All); class UMVVMViewModelBase; class UCommonButtonStyle; class UCommonTextStyle; class UInputMappingContext; class AXRCreativeToolActor; UCLASS() class UXRCreativePaletteTab : public UCommonActivatableWidget { GENERATED_BODY() }; UCLASS() class UXRCreativePalette : public UCommonActivatableWidget { GENERATED_BODY() public: void SetOwner(class AXRCreativeAvatar* InOwner) { Owner = InOwner; } protected: UPROPERTY(BlueprintReadOnly, Category="XR Creative") TArray> Tabs; UPROPERTY(BlueprintReadWrite, Category="XR Creative") TObjectPtr Owner; }; ////////////////////////////////////////////////////////////////////////// UCLASS(Abstract, BlueprintType) class UXRCreativeTool : public UObject { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category="XR Creative") virtual FName GetToolName() const PURE_VIRTUAL( UXRCreativeTool::GetToolName, return NAME_None; ); UFUNCTION(BlueprintCallable, Category="XR Creative") virtual FText GetDisplayName() const PURE_VIRTUAL( UXRCreativeTool::GetDisplayName, return FText::GetEmpty(); ); UFUNCTION(BlueprintCallable, Category="XR Creative") virtual TSubclassOf GetPaletteTabClass() const PURE_VIRTUAL( UXRCreativeTool::GetPaletteTabClass, return nullptr; ); }; UCLASS(Abstract, Blueprintable) class XRCREATIVE_API UXRCreativeBlueprintableTool : public UXRCreativeTool { GENERATED_BODY() public: virtual FName GetToolName() const override { return ToolName; } virtual FText GetDisplayName() const override { return DisplayName; } virtual TSubclassOf GetPaletteTabClass() const override { return PaletteTabClass; } UFUNCTION(BlueprintPure, Category="XR Creative") UInputMappingContext* GetToolInputMappingContext(); protected: UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category="XR Creative") FName ToolName; UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category="XR Creative") FText DisplayName; UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category="XR Creative") TSubclassOf ToolViewmodel; UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category="XR Creative") TSubclassOf PaletteTabClass; UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="XR Creative") TSubclassOf ToolActor; UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="XR Creative") TObjectPtr RightHandedInputMappingContext; UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="XR Creative") TObjectPtr LeftHandedInputMappingContext; }; UCLASS() class UXRCreativePaletteToolTab : public UXRCreativePaletteTab { GENERATED_BODY() protected: UPROPERTY(BlueprintReadOnly, Category="XR Creative") TWeakObjectPtr Tool; }; ////////////////////////////////////////////////////////////////////////// USTRUCT(BlueprintType) struct FXRCreativeToolEntry { GENERATED_BODY() UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TSubclassOf ToolClass; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TObjectPtr ToolIcon; }; UCLASS(BlueprintType) class XRCREATIVE_API UXRCreativeToolset : public UPrimaryDataAsset { GENERATED_BODY() public: // UXRCreativeToolset(); // // ~UXRCreativeToolset(); UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") FText ToolsetName; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TSubclassOf Avatar; /** Default Input Mapping is used for Right-Handed users, or if no LeftInputMappingContext is provided. */ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TObjectPtr RightHandedInputMappingContext; /** If Handedness is selected in XRCreative Settings, uses this entry in place of Default/Right */ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TObjectPtr LeftHandedInputMappingContext; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TArray Tools; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative") TSubclassOf Palette; UPROPERTY(EditAnywhere, Category="XR Creative") bool bEnableUIMenuActor = false; UFUNCTION(BlueprintCallable, Category="XR Creative") bool GetEnableUIMenuActor() const { return bEnableUIMenuActor; }; /*Enable for legacy or custom menu actors.*/ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="XR Creative", meta=(EditCondition="bEnableUIMenuActor")) TSubclassOf UIMenuActor; UFUNCTION(BlueprintCallable, Category="XR Creative") virtual TSubclassOf GetUIMenuActor() const { return UIMenuActor; }; };