Movement

Category: Listener Tier: Basic

Purpose

Detects when an object is moving, stopped, accelerating, or changing direction.

Visual Reference

As added to your scene
Movement brick as it appears in the GDLink editor

When To Use

1. Animation State Machine (Idle -> Walk -> Run)

**Idle to Walk**
Movement Listener (Mode: Velocity, Threshold: 0.5, Greater)
-> AND Gate
-> Animation Executor (Play: "walk")

**Walk to Run**
Movement Listener (Mode: Velocity, Threshold: 5.0, Greater)
-> AND Gate
-> Animation Executor (Play: "run")

**Back to Idle**
Movement Listener (Mode: Is Stopped, Threshold: 0.1)
-> AND Gate
-> Animation Executor (Play: "idle")

2. Fall Damage Trigger

Movement Listener (Mode: Velocity, Axis: Y Only, Threshold: -15.0, Less, Expose Data: true)
-> Collision Listener (Group: "ground")
-> AND Gate
-> Property Executor (Set Global "player_health" -= abs(movement_velocity.y) * 0.5)

Take damage proportional to fall velocity.

3. Boost Trail Effect

Movement Listener (Mode: Velocity, Threshold: 20.0, Greater)
-> AND Gate
-> Visibility Executor (Show: "BoostTrailParticles")

Show trail particles when moving fast.

4. Direction Change Footsteps

Movement Listener (Mode: Direction Change, Tolerance: 30.0)
-> AND Gate
-> Sound Executor (Play: "footstep_turn.wav")

Play sound when player pivots sharply.

5. Detect Sudden Stop (Car Brakes)

Movement Listener (Mode: Acceleration, Threshold: -10.0, Less, Expose Data: true)
-> AND Gate
-> Sound Executor (Play: "tire_screech.wav")
-> Animation Executor (Play: "brake_lights")

High deceleration triggers brake effects.

6. AFK Detection

Movement Listener (Mode: Is Stopped, Threshold: 0.1)
-> Delay Listener (Duration: 60.0, Repeat: false)
-> AND Gate

...

## Runtime Behavior

**Evaluates**: TRUE when object's movement matches specified criteria

```{raw} html
<div class="illustration-container">
        <div class="illustration-box">
            <div class="box-header">Generated UI Mockup — showing expanded properties</div>
            <div class="real-node brick-listener">
                <div class="real-header">
                    <div class="real-title"><span class="brick-icon-fallback"></span> <span>Movement</span></div>
                    <div class="real-controls"><div class="real-checkbox"></div><div class="real-btn">-</div><div class="real-btn">x</div></div>
                </div>
                <div class="real-inner-panel"><div class="real-row name-row" style="position:relative;"><span class="real-label">Name:</span><div class="real-input" style="color:#666; font-style:italic;">Label this brick...</div><div class="real-port" style="right:-15px;"></div></div><div class="real-inline-row" style="margin-top:4px;"><div class="real-inline-btn">Invert</div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Detection Mode:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Threshold:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Comparison:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Axis Filter:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Expose Data:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Expose Scope:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Expose Prefix:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Invert:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div><div class="real-row"><span class="real-label" style="width:auto; max-width:160px; overflow:hidden; text-overflow:ellipsis;">Verbose:</span><div class="real-input" style="flex-grow:0; width:120px; justify-content:space-between; padding:4px 8px;"><span></span><div class="real-input-dropdown-btn" style="padding:2px 6px;">v</div></div></div></div>
            </div>
        </div>
    </div>

Properties

Property

Type

Default

Notes

detection_mode

option, “Velocity”

What to detect - Velocity, Acceleration, Is Moving, Is Stopped, or Direction Change

threshold

float, 1.0

Minimum value to trigger

comparison

option, “Greater”

How to compare - Greater, Greater or Equal, Less, Less or Equal, Equal, or Not Equal

axis_filter

option, “All”

Which axes to evaluate - All, X Only, Y Only, Z Only, XY, XZ, or YZ

expose_data

bool, false

Store movement data in Local or Global variables

expose_scope

option, “Local”

Variable scope used when expose_data is enabled

expose_prefix

string, “movement”

Prefix for exposed variable names

invert

bool, false

Invert the movement condition

verbose

bool, false

Hidden ladybug debug output flag