Skip to content

Features — Dynamic Floor Plugin

Features

A complete list of verified features in the Coding Passion Dynamic Floor Plugin.


Runtime Floor Placement

FeatureDetails
Single-tile placementPlace a floor polygon defined by the tool’s shape (e.g. a rectangle) at the cursor position
Area fill placementAutomatically detect the enclosed polygon from a node network and fill the entire room area with one action
Polygon-based floor meshAll floor surfaces are procedural meshes triangulated from 2D polygon vertex data (triangulation via earcut)
Preview modeEnter a non-destructive preview state before committing changes — meshes update in preview without writing to the production database
Abort placementRight-click aborts the current placement and destroys the active tool
Mode toggleSwitch between fill mode and single-tile mode during placement (via modifier key, e.g. Shift)

Node Network System (Boundary Tracking)

The node network is the backbone of the fill algorithm and boundary detection.

FeatureDetails
Node graphBoundaries are represented as a graph of UBasicNode objects connected along wall/fence segments
Automatic polygon detectionGiven a cursor position, the plugin finds the node network that encloses that position and returns the enclosed polygon
Room-within-room nestingNode networks track inner and outer nesting depth — rooms inside rooms are supported
Hard and loose connectionsNodes support both structural (hard) connections and cosmetic (loose/soft) connections
Spatial queriesgetNodeNetworkEnclosingPosition — find the network enclosing a 3D position
Boundary overlap detectionDetect whether two node networks overlap their bounding areas

Polygon Database

FeatureDetails
Runtime CRUDAdd polygons (AddPolygon), remove them (RemovePolygonById), clear all
Polygon holesPolygons support cutouts/holes (FFloorPolygonHole)
Spatial filteringQuery polygons by 2D bounding box, height level, material ID, and floor type
Preview vs productionEnterPreviewMode / ExitPreviewMode — non-destructive preview of changes
Material handlingInsertPolygonWithMaterialHandling handles material-aware polygon insertion
Change trackingPolygons track bIsNew, bHasChanges, bMarkedForDeletion flags

Material System

FeatureDetails
Material IDsMaterials are assigned via int32 IDs, not direct UMaterial references
SimpleMaterialManager patternA manager Blueprint maps integer IDs to UMaterialInterface — designed to scale to large material libraries
Per-polygon materialEach FFloorPolygon carries its own MaterialId
Per-section renderingBP_FloorPolygonRenderer groups polygons by material and generates one mesh section per material
FloorType systemEach polygon has an EFloorType (Default, Border, Invisible) that allows logical layer separation

Floor Types (EFloorType)

ValueDescription
DefaultStandard visible floor
BorderBoundary/wall layer polygon
InvisibleInvisible logical layer (e.g. placement helpers, pathfinding regions)

Different floor types do not interact with each other in the backend, so changes to one layer do not affect another.


Rendering

FeatureDetails
Listener-based renderingRenderers implement IFloorPolygonChangeListener and register with UFloorPolygonChangeService
Batch updateOnAllPolygonsTransferred signals the end of a batch of changes — rebuild meshes once rather than per-polygon
Multiple renderersMultiple listeners can be registered simultaneously
Procedural mesh outputFloorPolygonToFloorMesh triangulates polygons into FFloorMeshData (vertices + indices) ready for ProceduralMeshComponent

Polygon Boolean Operations

Provided via UFloorPolygonClipperLibrary (Blueprint Function Library, powered by Clipper2):

FunctionDescription
UnionPolygonsMerge multiple polygons into unified shapes
DifferencePolygonsSubtract clip polygons from other polygons (supports holes)
DoPolygonsIntersectTest whether two polygons intersect or share an edge
DoPolygonsStrictlyIntersectTest strict intersection (no edge-only contact)

Save and Load

FeatureDetails
Polygon database saveUPolygonDatabaseSaveManager saves/loads the runtime polygon state (slot: PolygonDatabaseSaveSlot)
Node network saveUNodeSystemDefaultSaveManager saves/loads the node graph (slot: NodeSystemSaveSlot)
Custom save managerImplement INodeSystemSaveManagerInterface to use your own save/load logic

Extensibility

Extension pointHow
Custom tool shapeSubclass BP_ExampleRuntimeFloorPolygonToolActor, override BeginPlay, set ToolShape (Vector array)
Custom rendererImplement IFloorPolygonChangeListener in any Blueprint
Custom input handlerImplement IFloorInputEventHandlerInterface
Custom save managerImplement INodeSystemSaveManagerInterface
Custom node typeSubclass UBasicNode or UFloorNode; assign NodeType and NodeMaterial for layer separation

What is NOT supported

Multiplayer / network replicationNot supported
Mac (development or target)Not supported
Automatic grid snappingNot built-in — must be implemented in FindValidHitResult

See also