Grid Placement

DragManager

AUTO-GENERATED FILE — DO NOT EDIT MANUALLY

Source: systems/building/managers/drag_manager.gd

Version: 5.1

class_name: DragManager extends: GBSystemsComponent

Summary

Self-contained drag manager for tile-based drag operations.

Reads confirm_build input action directly and monitors GridTargetingState for tile changes. When both conditions are met (physics frame + new tile), calls BuildingSystem.try_build().

Architecture (v5.0.0):

  • One-way dependency: DragManager → BuildingSystem (calls try_build API)
  • BuildingSystem has NO knowledge of DragManager
  • Reads input directly via _input() to monitor confirm_build action state
  • Monitors GridTargetingState tile changes in _physics_process()
  • Physics-gated to prevent multiple builds per frame
  • Calls BuildingSystem.try_build() when conditions met

Usage:

  • Add DragManager as a child of your World/Systems node in the scene
  • Call resolve_gb_dependencies(container) to inject dependencies
  • DragManager automatically handles input, drag lifecycle, and building

Signals

(none)

Exports

(none)

Methods

  • _init()
  • _ready()
  • set_test_mode()
    • Public API for tests to manually control drag lifecycle. Disables input processing and allows manual drag control.
  • reset_physics_frame_gate()
    • Public API for tests: Reset the physics frame gate to allow next build. This simulates advancing to a new physics frame without actually waiting. Tests can call this between movements to clear the per-frame gate.
  • start_drag()
    • Public API: Start drag operation and return drag data. [return] DragPathData instance, or null if drag cannot start
  • stop_drag()
    • Public API: Stop drag operation.
  • _on_confirm_build_pressed()
    • Reads confirm_build input action to start/stop drag operations. Uses _input() instead of _unhandled_input() to read raw input state regardless of handling.
  • _on_confirm_build_released()
  • update_drag_state()
    • Public API: Update drag state and check for tile changes. Core drag update logic extracted for testability. Called automatically by _physics_process() during normal gameplay. Tests can call this directly to simulate drag updates without physics timing. [param delta] Time elapsed since last update in seconds
  • _physics_process()
    • Synchronizes drag detection with physics frame updates to prevent race conditions. Changed from _process() to _physics_process() to ensure drag events align with collision detection updates, preventing multiple builds in same physics frame. See: CHANGES/2025-10-02-drag-building-race-condition.md
  • resolve_gb_dependencies()
  • is_dragging()
  • _start_drag()
    • Internal: Start drag operation and return drag data. [return] DragPathData instance, or null if drag cannot start
  • _stop_drag()
  • _can_continue_dragging()