Table of Contents

Class IndicatorManager

Namespace
GridPlacement.GDScript
Assembly
MoonBark.GridPlacement.GDScript.dll

Manages placement validation and indicator visualization for grid-based object placement.\n\nCoordinates the creation, validation, and display of placement indicators, integrating with rule-based validation systems to provide visual feedback on valid or invalid placement locations. Emits signals to notify changes in indicator states.

class IndicatorManager extends GBNode2D
IndicatorManager

Fields

DEFAULT_NAME

const DEFAULT_NAME = "IndicatorManager"

Properties

initialized

Whether the manager has been initalized yet or not

var initialized: bool = false

instance

var instance = IndicatorManager.new()

issues

var issues: Array[String] = []

context

var context = p_container.get_contexts().indicator

owner_context

var owner_context = p_container.get_contexts().owner

logger

var logger = p_container.get_logger()

indicator_template

var indicator_template = p_container.get_templates().rule_check_indicator

targeting_state

var targeting_state = p_container.get_states().targeting

manipulation_state

var manipulation_state = p_container.get_states().manipulation

rules

var rules = p_container.get_placement_rules()

error_msg

var error_msg = "CRITICAL: Indicator template is not set. Cannot generate placement indicators. "

empty_report

var empty_report = IndicatorSetupReport.new(p_tile_check_rules, _targeting_state, _indicator_template)

report

var report = PlacementReport.new(p_gts.get_owner(), target, indicators_report, GBEnums.Action.BUILD)

empty_indicators

var empty_indicators: Array[RuleCheckIndicator] = []

empty_nodes

var empty_nodes: Array[Node2D] = []

combined_rules

var combined_rules = _placement_validator.get_combined_rules(p_placeable_rules, p_ignore_base)

validator_issues

var validator_issues = _placement_validator.setup(combined_rules, p_gts)

target

var target: Node = p_gts.target

tile_check_rules

var tile_check_rules: Array[TileCheckRule] = []

indicators_report

var indicators_report: IndicatorSetupReport = null

report

var report = PlacementReport.new(p_gts.get_owner(), target, indicators_report, GBEnums.Action.BUILD)

child_list

var child_list = []

collision_owners

var collision_owners: Array[Node2D] = []

layer

var layer: int = owner.collision_layer

layers_binary

var layers_binary = String.num_int64(layer, 2).pad_zeros(20)

rule

var rule = p_rules[i]

rule_name

var rule_name = rule.resource_name if rule.resource_name else "<unnamed>"

rule_class

var rule_class = rule.get_class()

script_path

var script_path: String = rule.get_script().resource_path if rule.get_script() else "<built-in>"

mask

var mask: int = rule.apply_to_objects_mask

mask_binary

var mask_binary = String.num_int64(mask, 2).pad_zeros(20)

matches

var matches: bool = (owner.collision_layer & mask) != 0

match_str

var match_str = "MATCHES" if matches else "MISMATCH"

owner

var owner: GBOwner = _owner_context.get_owner() if _owner_context != null else null

error_result

var error_result = ValidationResults.new(false, "PlacementValidator is not initialized")

indicators

var indicators = _indicator_service.get_indicators()

updated_count

var updated_count = 0

Methods

create_with_injection

static func create_with_injection(container: PlacementContainer, parent: Node = null) -> IndicatorManager:

Parameters

container
parent

Returns

get_runtime_issues

func get_runtime_issues() -> Array[String]:

Returns

resolve_gb_dependencies

func resolve_gb_dependencies(p_container: PlacementContainer) -> void:

Parameters

p_container

Returns

initialize

func initialize( p_indicator_context: IndicatorContext,

setup_indicators

func setup_indicators(p_test_object: Node2D, p_tile_check_rules: Array[TileCheckRule]) -> IndicatorSetupReport:

Parameters

p_test_object
p_tile_check_rules

Returns

get_indicator_count

func get_indicator_count(p_test_object: Node2D, p_tile_check_rules: Array[TileCheckRule]) -> int:

Parameters

p_test_object
p_tile_check_rules

Returns

get_indicators

func get_indicators() -> Array[RuleCheckIndicator]:

Returns

get_colliding_indicators

func get_colliding_indicators() -> Array[RuleCheckIndicator]:

Returns

get_colliding_nodes

func get_colliding_nodes() -> Array[Node2D]:

Returns

try_setup

func try_setup(p_placeable_rules: Array[PlacementRule], p_gts : GridTargetingState, p_ignore_base := false) -> PlacementReport:

Parameters

p_placeable_rules
p_gts
p_ignore_base

Returns

clear

func clear() -> void:

Returns

tear_down

func tear_down() -> void:

Returns

apply_rules

func apply_rules() -> void:

Returns

validate_placement

func validate_placement() -> ValidationResults:

Returns

inject_collision_mapper_dependencies

func inject_collision_mapper_dependencies(container: PlacementContainer) -> bool:

Parameters

container

Returns

get_or_create_testing_indicator

func get_or_create_testing_indicator(parent_node: Node) -> RuleCheckIndicator:

Parameters

parent_node

Returns

setup_collision_mapper

func setup_collision_mapper(testing_indicator: RuleCheckIndicator, setups: Dictionary) -> void:

Parameters

testing_indicator
setups

Returns

get_collision_mapper

func get_collision_mapper() -> CollisionMapper:

Returns

get_placement_validator

func get_placement_validator() -> PlacementValidator:

Returns

force_shapecast_update

func force_shapecast_update() -> void:

Returns

force_indicators_validity_evaluation

func force_indicators_validity_evaluation() -> int:

Returns

Events

indicators_changed

Emitted when the active placement indicators are updated.

signal indicators_changed(indicators: Array[RuleCheckIndicator])