// Copyright (c) Meta Platforms, Inc. and affiliates. #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Engine/DataTable.h" #include "MRUtilityKitSceneDataProvider.generated.h" UCLASS(ClassGroup = MRUtilityKit, meta = (DisplayName = "MR Utility Kit Scene Data Provider")) /* * This actor is used to provide scene data to the MR Utility Kit when running in editor. * You can also use it to not load a room from device. * Use RandomRoom to load a random room from the list of rooms. */ class MRUTILITYKIT_API AMRUKSceneDataProvider : public AActor { GENERATED_BODY() public: /* * This list holds the rooms that can be loaded, the key is the room type and the value is a data table that contains multiple rooms. * Roomtypes such as Bedrooms, Livingrooms, etc. */ UPROPERTY(EditAnywhere, Category = "MR Utility Kit") TMap Rooms; /* * When this is true, a random room will be loaded from the list of rooms. */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MR Utility Kit") bool bUseRandomRoom = true; /* * When this is true, a random room will be loaded a specific room class, defined in Rooms (Bedrooms, Offices, ..). */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MR Utility Kit", meta = (EditCondition = "!bUseRandomRoom", EditConditionHides)) bool bUseRandomRoomFromClass = false; /* * Use this property to define a specific room class to load, only visible when bUseRandomRoomFromClass is true. * This can be a room class such as Bedrooms, Offices, .. */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MR Utility Kit", meta = (EditCondition = "bUseRandomRoomFromClass && !bUseRandomRoom", EditConditionHides)) FString SpecificRoomClass; /* * Define a specific room to load, only visible when bUseRandomRoom is false. */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MR Utility Kit", meta = (EditCondition = "!bUseRandomRoom && !bUseRandomRoomFromClass", EditConditionHides)) FString SpecificRoomName; /* * Gets you a room from the list of rooms, if bUseRandomRoom is true, a random room will be returned. */ UFUNCTION(BlueprintCallable, Category = "MR Utility Kit") void GetRoom(FString& RoomJSON, FString& RoomName); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; }; USTRUCT(Blueprintable, BlueprintType) struct FJSONData : public FTableRowBase { GENERATED_USTRUCT_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MR Utility Kit") FString JSON; };