PlaceableSelectionUI
Summary
Section titled “Summary”Unified UI component for selecting placeable objects and placeable sequences to build.
Provides a tabbed, grid-based interface for selecting placeables and placeable sequences to place in the world. Supports folder-based asset loading with [GBAssetResolver] for automatic discovery of content and category tags. Integrates with [BuildingSystem] to initiate placement mode when items are selected.
Key Features: [ul] - Mixed content grids supporting both individual placeables and sequences - Configurable sizing for consistent template height and icon dimensions - Variant cycling for sequences through enhanced [PlaceableListEntry] components - Automatic asset loading from configured folders - Category-based organization with tabs [/ul]
Usage:
var selection_ui = PlaceableSelectionUI.new()selection_ui.placeables_folder = "res://my_placeables"selection_ui.category_tags_folder = "res://my_categories"selection_ui.fixed_template_height = 48selection_ui.fixed_icon_size = 40Signals
Section titled “Signals”signal valid_changed( is_valid: bool )Emitted when the UI validation state changes.
is_valid: True if the UI is properly configured and ready for use.
Properties
Section titled “Properties”Category tags to include alongside folder-loaded ones.
These tags are combined with tags loaded from [member category_tags_folder].
placeables: Array[Placeable] = []Individual placeables to include alongside folder-loaded ones.
These are displayed in grids alongside sequences. Combined with placeables from [member placeables_folder].
sequences: Array[PlaceableSequence] = []Placeable sequences to include alongside folder-loaded ones.
Sequences allow variant cycling within a single grid slot. Combined with sequences from [member sequences_folder].
placeable_entry_template: PackedSceneTemplate scene for individual placeable entries.
Should be a [PlaceableView] that displays icon and name.
sequence_entry_template: PackedSceneTemplate scene for sequence entries with variant cycling.
Should be a [PlaceableListEntry] that supports cycling through sequence variants.
fixed_template_height: int = 48Fixed height for all templates to prevent resizing when cycling through sequence variants.
When set to a positive value, enforces consistent height for all template entries.
When set to 0, disables PlaceableSelectionUI-level height enforcement and allows templates to size naturally.
:::note[Note] Individual PlaceableView instances may still enforce their own height via their fixed_view_height property.
Default: 48 pixels for consistent template sizing. :::
fixed_icon_size: int = 40Fixed icon size for all placeable view icons to ensure consistent icon dimensions.
When set to a positive value, enforces both width and height for all icon TextureRects in PlaceableView instances.
When set to 0, icon sizing is not enforced and will use template defaults.
Default: 40 pixels for standard icon sizing.
show_category_tab_names: bool = trueWhether category tab titles should be visible for manual category selection.
When false, tabs are hidden and only grid content is shown.
hide_ui_on_selection: bool = falseWhether to hide the selection UI when an item is selected.
When true, the UI automatically hides after the user selects a placeable or sequence.
ui_root: ControlRoot control node for showing and hiding the entire UI.
tab_container: TabContainerTab container that handles category-based organization.
Each tab represents a category tag and contains a grid of matching placeables/sequences.
Methods
Section titled “Methods”func _ready( )func resolve_gb_dependencies( p_container: GBCompositionContainer ) -> voidCalled by GBChildInjector to resolve dependencies on the UI.
p_container: GBCompositionContainer - Container with system dependencies and configurationfunc _load_assets( ) -> voidLoad assets using GBAssetResolver for both placeables and sequences
func rebuild( ) -> voidRebuild the UI after changing content type or assets at runtime
func clear( )func _setup_tabs( )Generate tabs for each category and populate each tab with content in unified grid layout
func _get_placeables_with_tag( tag: Resource ) -> Array[Placeable]func _get_sequences_with_tag( tag: Resource ) -> Array[PlaceableSequence]func _create_mixed_content_grid( placeables_for_tag: Array[Placeable], sequences_for_tag: Array[PlaceableSequence] ) -> GridContainerCreates a mixed content grid containing both placeables and sequences
func _on_placeable_selected( p_placeable: Placeable )func _on_sequence_entry_selected( entry: PlaceableListEntry )func _on_sequence_variant_changed( entry: PlaceableListEntry, variant_index: int )func add_placeables( new_placeables: Array[Placeable] )Adds placeable options to the UI and updates the corresponding visuals.
new_placeables: Array[Placeable] - Array of new placeable resources to add to the UIfunc remove_placeables( rem_placeables: Array[Placeable] )Removes placeable options from the UI and updates the corresponding visuals.
rem_placeables: Array[Placeable] - Array of placeable resources to remove from the UIfunc get_runtime_issues( ) -> Array[String]Run setup checks on the UI to ensure proper setup. Returns validation issues found during setup checks.
return: Array[String] - List of validation issues (empty if valid)func _on_mode_changed( p_mode: GBEnums.Mode )When hidden, if in build mode, automatically switch to off mode
func _validate_basic_components( ) -> voidGet the current building system from systems context Validates basic required components are properly assigned
func _validate_required_templates( ) -> voidValidates only the templates that are needed based on loaded content
func _get_building_system( ) -> BuildingSystemfunc _enforce_template_height( template_entry: Control ) -> voidEnforces fixed height for consistent template sizing when fixed_template_height > 0.
When fixed_template_height is 0, height enforcement is disabled at the PlaceableSelectionUI level.
func _constrain_template_icons( template_entry: Control ) -> voidConstrains icon/image elements within templates to prevent height expansion
func _find_nodes_by_type( parent: Node, type_name: String ) -> Array[Node]Recursively finds all nodes of a specific type within a parent node
Source
Section titled “Source”addons/grid_building/ui/placeable/single/placeable_selection_ui.gd
This API reference is automatically generated from the plugin source code. For implementation examples and usage guides, see the guides section.