IndicatorService

Reconcile newly created indicators with...

sort Weight: 10

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

STABLE

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: Variant
  • p_targeting_state: GridTargetingState
  • p_indicator_template : PackedScene: Variant
  • p_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: GBCompositionContainer
  • parent: 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: Node
  • result: 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: Node2D
  • p_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: Node2D
  • p_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: Dictionary
  • tile_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]: Variant
  • expected_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: Node2D
  • tile_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