Class PlacementSystem
- Namespace
- GridPlacement.GDScript
- Assembly
- MoonBark.GridPlacement.GDScript.dll
Manages placement of objects in the game world.\n\nHandles preview, placement validation, and build actions. Uses tile collision indicators to show valid/invalid spots before placement. Checks all rules before adding objects to the world and emits signals for build success or failure.
class PlacementSystem extends GBSystem
PlacementSystem
Fields
WARNING_INVALID_PLACEABLE
const WARNING_INVALID_PLACEABLE = "Invalid placeable resource. Can't instantiate. [%s]"
WARNING_NO_PREVIEW
const WARNING_NO_PREVIEW = "No preview instance created to instantiate yet. Returning null."
Properties
system
var system = PlacementSystem.new()
issues
var issues: Array[String] = []
logger
var logger = container.get_logger()
placement_polygons
Collision polygons for placement indicators.
var placement_polygons: Array[CollisionPolygon2D]
preview_layer
Preview layer index for buildable/unbuildable tiles.
var preview_layer: int
selected_placeable
Currently selected placeable resource.
var selected_placeable: Placeable
indicators_group
Parent node for collision indicators.
var indicators_group: Node2D
issues
var issues: Array[String] = []
manager
var manager = _indicator_context.get_manager()
previous_report
var previous_report = _report
preview
var preview = _get_lazy_preview_builder().get_preview()
previous_indicators
var previous_indicators = previous_report.indicators_report if previous_report != null else null
placement_validation
var placement_validation: ValidationResults = manager.validate_placement()
diag_errors
var diag_errors = placement_validation.get_errors()
validation_issues
var validation_issues = placement_validation.get_issues()
placer
var placer = _states.building.get_owner()
fail_msg
var fail_msg = "[DIAG-BUILD] _build_instance returned null for selected_placeable=%s" % str(selected_placeable)
failure_report
var failure_report = PlacementReport.new(get_builder_owner(), _get_lazy_preview_builder().get_preview(), null, GBEnums.Action.BUILD)
positioner
var positioner: Node2D = _states.targeting.positioner
original_pos
var original_pos = positioner.global_position
report
var report: PlacementReport = manager.try_setup(p_placeable_rules, targeting_state, p_ignore_base_rules)
failure_report
var failure_report = PlacementReport.new(get_builder_owner(), _get_lazy_preview_builder().get_preview(), null, GBEnums.Action.BUILD)
preview_instance
var preview_instance: Node2D = _get_lazy_preview_builder().create_preview(p_placeable)
ignore_base_rules
var ignore_base_rules = p_placeable != null and p_placeable.ignore_base_rules == true
setup_report
var setup_report: PlacementReport = _try_setup(preview_instance, selected_placeable.placement_rules, ignore_base_rules)
preview_instance
var preview_instance: Node2D = _get_lazy_preview_builder().create_preview(p_placeable)
rules
var rules = p_placeable.placement_rules if p_placeable else []
ignore_base_rules
var ignore_base_rules = p_placeable != null and p_placeable.ignore_base_rules == true
placement_report
var placement_report: PlacementReport = _try_setup(preview_instance, rules, ignore_base_rules)
issues
var issues: Array[String] = []
check_props
var check_props: Array[String] = ["_indicator_context"]
data
var data = PlacementActionData.new(selected_placeable, p_report, p_build_type)
conn_list
var conn_list = _states.building.get_signal_connection_list("success")
data
var data = PlacementActionData.new(selected_placeable, p_report, p_build_type)
manager
var manager = _indicator_context.get_manager()
targeting_state
var targeting_state = _states.targeting
report
var report: PlacementReport = manager.try_setup(p_placeable_rules, targeting_state, p_ignore_base_rules)
instance
var instance = p_placeable.packed_scene.instantiate()
placeable_instance
var placeable_instance = PlaceableInstance.new(p_placeable.resource_path)
issues
var issues: Array[String] = []
critical_issue
Make sure placement manager exists to put preview instances onto
var critical_issue = "CRITICAL: No IndicatorManager found in IndicatorContext. IndicatorManager must be manually created in the scene hierarchy as a child of ManipulationParent (under GridPositioner). Indicators are always parented to IndicatorManager. IndicatorManager must be a child of ManipulationParent to inherit rotation/transform via scene tree. IndicatorManager will register itself through dependency injection."
Methods
create_with_injection
static func create_with_injection(container: PlacementContainer) -> PlacementSystem:
Parameters
container
Returns
get_building_state
func get_building_state() -> PlacementState:
Returns
get_targeting_state
func get_targeting_state() -> GridTargetingState:
Returns
is_ready_to_place
func is_ready_to_place() -> bool:
Returns
is_in_build_mode
func is_in_build_mode() -> bool:
Returns
exit_build_mode
func exit_build_mode() -> void:
Returns
resolve_gb_dependencies
func resolve_gb_dependencies(p_container : PlacementContainer) -> void:
Parameters
p_container
Returns
try_build
func try_build(p_build_type: GBEnums.BuildType = GBEnums.BuildType.SINGLE) -> PlacementReport:
Parameters
p_build_type
Returns
try_build_at_position
func try_build_at_position(p_global_position: Vector2) -> PlacementReport:
Parameters
p_global_position
Returns
enter_build_mode
func enter_build_mode(p_placeable: Placeable) -> PlacementReport:
Parameters
p_placeable
Returns
clear_preview
func clear_preview() -> void:
Returns
instance_preview
func instance_preview(p_placeable: Placeable) -> Node2D:
Parameters
p_placeable
Returns
get_runtime_issues
func get_runtime_issues() -> Array[String]:
Returns
get_builder_owner
func get_builder_owner() -> GBOwner:
Returns
report_built
func report_built(p_report : PlacementReport, p_build_type: GBEnums.BuildType = GBEnums.BuildType.SINGLE) -> void:
Parameters
p_reportp_build_type
Returns
report_failure
func report_failure(p_report : PlacementReport, p_build_type: GBEnums.BuildType = GBEnums.BuildType.SINGLE) -> void:
Parameters
p_reportp_build_type