IndicatorService
Reconcile newly created indicators with...
Reconcile newly created indicators with existing managed indicators. Strategy:
- Build a map of existing indicators keyed by tile position
- For each new indicator, compute its tile position; if an existing indicator exists at that position, reuse it: clear its rules and add the rules from the new indicator, update its global_position and visuals, then free the newly created duplicate.
- Any existing indicators not matched are freed.
- Returns the final array of indicators managed by the service.
Version: v5.0.0
Inherits: GBInjectable
Source: indicator_service.gd
Parsing: AST-based for maximum accuracy with symbol typing
Variables
_indicators:
_collision_mapper: CollisionMapper
Type: CollisionMapper
_testing_indicator:
_indicator_template:
_targeting_state:
_logger: GBLogger
Type: GBLogger
_indicator_contact_positions:
_indicators_parent: Node
Type: Node
_starting_rotation: float
Type: float
_starting_scale: Vector2
Type: Vector2
Signals
indicators_changed(_indicators: Array[RuleCheckIndicator]: Variant)
Also emitted during reset operations when indicators are cleared.
Parameters:
_indicators: Array[RuleCheckIndicator]: Variant
Methods
_init
Signature: _init(p_indicators_parent : Node: Variant, p_targeting_state: GridTargetingState, p_indicator_template : PackedScene: Variant, p_logger : GBLogger: Variant) -> void
Returns: void
Parameters:
p_indicators_parent : Node: Variantp_targeting_state: GridTargetingStatep_indicator_template : PackedScene: Variantp_logger : GBLogger: Variant
create_with_injection
Signature: static create_with_injection(container: GBCompositionContainer, parent: Node) -> IndicatorService
Note: Callers should check get_runtime_issues() after creation to handle any validation warnings.
Returns: IndicatorService
Static: true
Parameters:
container: GBCompositionContainerparent: Node
resolve_gb_dependencies
Signature: resolve_gb_dependencies(container: GBCompositionContainer) -> bool
Returns: bool - True if dependencies were successfully resolved, false otherwise
Returns: bool
Parameters:
container: GBCompositionContainer
force_update
Signature: force_update() -> void
Only processes indicators that are still valid instances.
Returns: void
get_runtime_issues
Signature: get_runtime_issues() -> Array
Note: This method is non-mutating and safe to call frequently for diagnostic purposes.
Returns: Array
reset
Signature: reset(parent_node: Node = null) -> void
double-validation to ensure indicators array is properly cleared.
Returns: void
Parameters:
parent_node: Node(optional, default:null)
get_indicators
Signature: get_indicators() -> Array
Array[RuleCheckIndicator] - Duplicate of current indicators (safe for external iteration)
Returns: Array
get_diagnostic_info
Signature: get_diagnostic_info() -> Dictionary
Note: This method is non-mutating and safe to call for debugging purposes.
Returns: Dictionary
get_collision_mapper
Signature: get_collision_mapper() -> CollisionMapper
[returns] The collision mapper instance.
Returns: CollisionMapper
_find_all_indicators
Signature: _find_all_indicators(node: Node, result: Array) -> void
result: Array - Array to append found indicators to (modified in-place)
Returns: void
Parameters:
node: Noderesult: Array
set_indicators
Signature: set_indicators(value: Array[RuleCheckIndicator]: Variant) -> void
Returns: void
Parameters:
value: Array[RuleCheckIndicator]: Variant
setup_indicators
Signature: setup_indicators(p_test_object: Node2D, p_tile_check_rules: Array[TileCheckRule]: Variant) -> IndicatorSetupReport
and testing scenarios. It will return error reports instead of throwing exceptions.
Returns: IndicatorSetupReport
Parameters:
p_test_object: Node2Dp_tile_check_rules: Array[TileCheckRule]: Variant
calculate_indicator_count
Signature: calculate_indicator_count(p_test_object: Node2D, p_tile_check_rules: Array[TileCheckRule]: Variant) -> int
[returns] The number of indicators that would be created, or -1 if calculation fails.
Returns: int
Parameters:
p_test_object: Node2Dp_tile_check_rules: Array[TileCheckRule]: Variant
build_collision_test_setups
Signature: build_collision_test_setups(owner_shapes: Dictionary, tile_size: Vector2i) -> Dictionary
Dictionary - Test setups keyed by collision owner
Returns: Dictionary
Parameters:
owner_shapes: Dictionarytile_size: Vector2i
build_collision_test_setups_with_targeting_state
Signature: build_collision_test_setups_with_targeting_state(owner_shapes: Dictionary) -> Dictionary
Dictionary - Test setups keyed by collision owner
Returns: Dictionary
Parameters:
owner_shapes: Dictionary
gather_collision_shapes
Signature: gather_collision_shapes(test_object: Node2D) -> Dictionary
Dictionary[Node2D, Array] - Mapping of collision owners to their shapes
Returns: Dictionary
Parameters:
test_object: Node2D
validate_indicator_positions
Signature: validate_indicator_positions(indicators: Array[RuleCheckIndicator]: Variant, expected_positions: Array[Vector2i]: Variant) -> IndicatorSetupUtils
IndicatorSetupUtils.PositionValidationResult - Validation result with details
Returns: IndicatorSetupUtils
Parameters:
indicators: Array[RuleCheckIndicator]: Variantexpected_positions: Array[Vector2i]: Variant
validate_setup_preconditions
Signature: validate_setup_preconditions(test_object: Node2D, tile_check_rules: Array[TileCheckRule]: Variant) -> Array
Array[String] - List of validation issues (empty if all valid)
Returns: Array
Parameters:
test_object: Node2Dtile_check_rules: Array[TileCheckRule]: Variant
get_or_create_testing_indicator
Signature: get_or_create_testing_indicator(parent_node: Node) -> RuleCheckIndicator
RuleCheckIndicator - The testing indicator instance, or null if creation fails
Returns: RuleCheckIndicator
Parameters:
parent_node: Node
get_colliding_indicators
Signature: get_colliding_indicators() -> Array
Note: Only includes indicators that are valid instances and have active collisions.
Returns: Array
get_colliding_nodes
Signature: get_colliding_nodes() -> Array
Note: Automatically deduplicates colliding nodes to avoid duplicates in the result.
Returns: Array
add_indicators
Signature: add_indicators(new_indicators: Array[RuleCheckIndicator]: Variant) -> void
Note: Safely handles null or empty arrays by returning early without modification.
Returns: void
Parameters:
new_indicators: Array[RuleCheckIndicator]: Variant
free_indicators
Signature: free_indicators(to_free: Array[RuleCheckIndicator]: Variant) -> void
Includes validation and error logging for debugging cleanup issues.
Returns: void
Parameters:
to_free: Array[RuleCheckIndicator]: Variant
clear_indicators
Signature: clear_indicators() -> void
Verify the array is actually cleared
Returns: void
_get_corner_suffix
Signature: _get_corner_suffix(tile_pos: Vector2i) -> String
String - Corner abbreviation (TL, TR, BL, BR) or empty string if not a corner
Returns: String
Parameters:
tile_pos: Vector2i
_log_summary
Signature: _log_summary(p_report : IndicatorSetupReport: Variant) -> void
Return corner abbreviation
Returns: void
Parameters:
p_report : IndicatorSetupReport: Variant
_get_indicator_tile_pos
Signature: _get_indicator_tile_pos(indicator: RuleCheckIndicator) -> void
Helper: compute tile position for an indicator using targeting state
Returns: void
Parameters:
indicator: RuleCheckIndicator
_reconcile_indicators
Signature: _reconcile_indicators(new_indicators: Array[RuleCheckIndicator]: Variant) -> Array
- Returns the final array of indicators managed by the service.
Returns: Array
Parameters:
new_indicators: Array[RuleCheckIndicator]: Variant