Validation: Configuration (5.0.3)

This page outlines validation utilities for configuration validation at initialization, checking that settings, resources, and dependencies are properly configured when the scene loads.

Configuration Validation with PlacementValidator

In 5.0.3: PlacementValidator handles validation. It uses placement rules to validate potential placements at runtime.

Core Validation Classes

  1. PlacementValidator: The main class that orchestrates validation. It takes a list of rules and evaluates them against the current placement context.
  2. ValidationResults: A data container that captures the outcome of validation. It holds is_successful, issues (errors), and warnings.

How It Works

  1. Setup: Create a PlacementValidator with your configured rules.
  2. Validation: Call validate_placement(context) to check a potential placement.
  3. Results: Get a ValidationResults object with success status and any issues.

ValidationResults

PropertyTypeDescription
is_successfulboolTrue if no blocking issues were found.
issuesArray[String]List of critical errors that prevent operation.
warningsArray[String]List of non-critical observations.

Usage Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func validate_rule_context(rules: Array, logger: GBLogger, my_entity: Node, rule_comp: Node) -> void:
    var validator = PlacementValidator.new(rules, logger)
    var context = PlacementRuleContext.new()
    context.target_cell = Vector2i(5, 3)
    context.grid_size = Vector2i(10, 10)

    var results = validator.validate_placement(context)
    if not results.is_successful:
        for issue in results.issues:
            print("Validation failed: ", issue)

    my_entity.add_child(rule_comp)

By standardizing on PlacementRule, the system can transparently inspect, validate, and execute rules without needing to know the specific logic of every single rule type.

Tips

  • Keep configuration validation fast; it runs during entity creation or system startup.
  • Differentiate between Invalid Configuration (developer error, e.g., missing resource) and Invalid Placement (player error, e.g., placing inside a wall).
  • Use ValidationResults to combine results from multiple rules into a single report.

Validated By

The validation architecture is verified by the following test suites, which ensure that validation result containers and rule components behave correctly under various configurations.

  • Configuration Validation: res://addons/grid_building/test/utilities/gb_configuration_validator_test.gd - Verifies that the injector correctly triggers validation after wiring.
  • Result Management: res://addons/grid_building/test/rules/validation/valid_placement_tile_rule_test.gd - Tests tile rule validation and placement correctness.
  • System Integration: res://addons/grid_building/test/rules/validation/rule_system_integration_tests.gd - Validates the full sequence of validation logic within the placement systems.

Further Tips