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 PlacementNode2D
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, PlacementEnums.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_category_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, PlacementEnums.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: PlacementOwner = _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
containerparent
Returns
get_runtime_issues
func get_runtime_issues() -> Array[String]:
Returns
resolve_placement_dependencies
func resolve_placement_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_objectp_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_objectp_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, p_category_rules: Array[PlacementRule] = []) -> PlacementReport:
Parameters
p_placeable_rulesp_gtsp_ignore_basep_category_rules
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_indicatorsetups
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])