DragManager
AUTO-GENERATED FILE – DO NOT EDIT MANUALLY
Self-contained drag manager for tile-based drag operations.
Source File: addons/grid_building/systems/building/components/drag_manager.gd
Extends: GBSystemsComponent
Properties
- Property:
drag_data: [DragPathData](./drag-path-data/) = null
Private Properties
Property:
_targeting_state: [GridTargetingState](./grid-targeting-state/)(private)Property:
_building_system: [BuildingSystem](./building-system/)(private)Property:
_logger: [GBLogger](./gb-logger/)(private)Property:
_actions: [GBActions](./gb-actions/)(private)Property:
_last_signal_physics_frame: int = -1(private)Prevents multiple signal emissions in same physics frame. Tracks the last physics frame where targeting_new_tile was emitted to gate rapid signals. See: CHANGES/2025-10-02-drag-building-race-condition.md
Constants
- Constant:
DEFAULT_NAME = "DragManager"
Public Methods
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.
format_drag_state
Flags: static
DRY diagnostic helper: Format drag state for debugging
drag_data The DragPathData instance to format
[return] Formatted string with drag state information
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.
delta Time elapsed since last update in seconds
resolve_gb_dependencies
is_dragging
Private Methods
_init
Flags: private
_ready
Flags: private
_input
Flags: private
Reads confirm_build input action to start/stop drag operations. Uses _input() instead of _unhandled_input() to read raw input state regardless of handling.
_should_update_drag
Flags: private
Returns true if drag state should be updated
_log_drag_update_start
Flags: private
Logs the start of a drag update
_log_drag_cannot_continue
Flags: private
Logs that drag cannot continue
_log_drag_update_result
Flags: private
Logs the result of a drag update
_handle_tile_change
Flags: private
Handles a tile change during drag
_should_process_tile_change
Flags: private
Returns true if tile change should be processed
_prevent_duplicate_build_attempts
Flags: private
Prevents consecutive attempts on the same tile
_trigger_build_if_ready
Flags: private
Triggers build if all conditions are met
_is_in_build_mode
Flags: private
Returns true if BuildingSystem is in BUILD mode with active preview
_has_active_preview
Flags: private
Returns true if there is an active preview
_log_no_building_system
Flags: private
Logs that BuildingSystem reference is missing
_log_not_in_build_mode
Flags: private
Logs that system is not in BUILD mode
_log_no_active_preview
Flags: private
Logs that there is no active preview
_increment_and_log_build_requests
Flags: private
Increments build request count and logs it
_physics_process
Flags: private
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
_start_drag
Flags: private
Internal: Start drag operation and return drag data. [return] DragPathData instance, or null if drag cannot start
_stop_drag
Flags: private
_can_continue_dragging
Flags: private