Files
Depths/Plugins/ProceduralDungeon/Source/ProceduralDungeon/Public/ProceduralDungeonSettings.h
T
2026-04-30 12:24:52 +02:00

115 lines
5.9 KiB
C++

// Copyright Benoit Pelletier 2019 - 2025 All Rights Reserved.
//
// This software is available under different licenses depending on the source from which it was obtained:
// - The Fab EULA (https://fab.com/eula) applies when obtained from the Fab marketplace.
// - The CeCILL-C license (https://cecill.info/licences/Licence_CeCILL-C_V1-en.html) applies when obtained from any other source.
// Please refer to the accompanying LICENSE file for further details.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Engine/EngineTypes.h"
#include "ProceduralDungeonSettings.generated.h"
// Holds the plugin's settings.
UCLASS(Config = Game, DefaultConfig)
class PROCEDURALDUNGEON_API UProceduralDungeonSettings : public UObject
{
GENERATED_BODY()
public:
UProceduralDungeonSettings(const FObjectInitializer& ObjectInitializer);
// Size of a room unit. Room's size in data assets will express the multiple of this unit size.
// For example a room size of (5, 10, 1) with a unit size of (100, 100, 400) will result of a real room size of (500, 1000, 400).
UPROPERTY(EditAnywhere, config, Category = "General", meta = (ClampMin = 0))
FVector RoomUnit;
// The bounding size of the doors. It is used only to display the door's blue box when "Draw Debug" is set to true.
UPROPERTY(EditAnywhere, config, Category = "General", meta = (DisplayName = "Default Door Size", ClampMin = 0))
FVector DoorSize;
// The height of the door's base from the room's base (in percentage of the room unit Z)
UPROPERTY(EditAnywhere, config, Category = "General", meta = (DisplayName = "Default Door Offset", ClampMin = 0, ClampMax = 1, UIMin = 0, UIMax = 1))
float DoorOffset;
// When true, doors will be connected as long they are at the same place.
// When false, only the doors between the previous and the new generated room will be connected.
// DEPRECATED: Keep it true and use the CanLoop setting in the DungeonGenerator actor instead. This project-wide setting will be removed in a future version.
UPROPERTY(EditAnywhere, config, Category = "General")
bool CanLoop;
// The object type used for the dungeon rooms trigger boxes.
// Defaulted to Engine Trace Channel 6.
// You can create new ones in your project settings under the Collision tab.
UPROPERTY(EditAnywhere, config, Category = "General")
TEnumAsByte<ECollisionChannel> RoomObjectType {ECollisionChannel::ECC_EngineTraceChannel6};
// The number of dungeon generation retry before the generator gives up.
UPROPERTY(EditAnywhere, config, Category = "General", AdvancedDisplay, meta = (UIMin = 1, ClampMin = 1))
int32 MaxGenerationTry;
// The number of room placement retry on a specific door before the generator gives up and continues with the next door.
UPROPERTY(EditAnywhere, config, Category = "General", AdvancedDisplay, meta = (UIMin = 1, ClampMin = 1))
int32 MaxRoomPlacementTry;
// The number of room placement retry on a specific door before the generator gives up and continues with the next door.
UPROPERTY(EditAnywhere, config, Category = "General", AdvancedDisplay, meta = (UIMin = 1, ClampMin = 1))
int32 RoomLimit;
// The rooms visibility will be toggled off when the player is not inside it or in a room next to it.
UPROPERTY(EditAnywhere, config, Category = "Occlusion Culling", meta = (DisplayName = "Enable Occlusion Culling"))
bool OcclusionCulling;
// The legacy occlusion culling system only toggles the visibility of the actors in the rooms, keeping the collisions, ticking and all oher things.
// The new system toggles instead the whole room levels visibility, shutting off the ticking and other things of the actors and the level script.
//UPROPERTY(EditAnywhere, config, Category = "Procedural Dungeon", meta=(EditCondition="OcclusionCulling"))
//bool LegacyOcclusion;
// Defines how many connected rooms are visible from the player's room (1 means only the room where the player is).
UPROPERTY(EditAnywhere, config, Category = "Occlusion Culling", meta = (EditCondition = "OcclusionCulling", UIMin = 1, ClampMin = 1))
int32 OcclusionDistance;
// Keep track of dynamic actors entering and leaving the room to be able to show/hide them with the room.
// TODO: Still useful? It was there for performance issues, but there is none anymore...
// Maybe moving it in a console variable only for debug purpose?
UPROPERTY(EditAnywhere, config, Category = "Occlusion Culling", meta = (EditCondition = "OcclusionCulling"))
bool OccludeDynamicActors;
// Show room and door outlines in editor and development builds
UPROPERTY(EditAnywhere, config, Category = "Debug")
bool DrawDebug;
// Show room and door outlines in editor and development builds
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "DrawDebug"))
bool bDrawOnlyWhenEditingRooms;
// Show the room origin in magenta
// DEPRECATED: This setting will be removed in a future release of the plugin.
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "DrawDebug"))
bool ShowRoomOrigin;
// Flip side the arrow that shows door facing direction.
// True means that the arrow gets inside the room (opposite of door actor's forward).
// False means that the arrow goes outside the room (same as door actor's forward).
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "DrawDebug"))
bool bFlipDoorArrowSide;
// Length of the door's debug arrow.
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "DrawDebug"))
float DoorArrowLength;
// Size of the door's debug arrow head.
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "DrawDebug"))
float DoorArrowHeadSize;
// Show some logs on the screen
UPROPERTY(EditAnywhere, config, Category = "Debug")
bool OnScreenPrintDebug;
// Duration of the screen logs
UPROPERTY(EditAnywhere, config, Category = "Debug", meta = (EditCondition = "OnScreenPrintDebug"))
float PrintDebugDuration;
};