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()