Table of Contents

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_report
p_build_type

Returns

report_failure

func report_failure(p_report : PlacementReport, p_build_type: GBEnums.BuildType = GBEnums.BuildType.SINGLE) -> void:

Parameters

p_report
p_build_type

Returns