Clay Behavior Plugin

The Clay Behavior plugin provides reusable behavior components for game entities, including movement patterns, path following, triggers, and complex object builders. It integrates with the Clay World and Physics plugins to create dynamic, interactive game behaviors.

Getting Started

To use the Clay Behavior plugin in your QML files:

import Clayground.Behavior

Core Components

  • Move - Placeholder for future movement behavior implementation.
  • MoveTo - Moves an actor entity to a specified destination using physics-based velocity control.
  • FollowPath - Makes an entity follow a predefined path of waypoints with optional looping.
  • RectTrigger - A rectangular sensor area that detects when physics entities enter it.
  • WorldChangedConnections - Utility that monitors world dimension changes and invokes a callback.
  • DoorBuilder - Factory component that creates automated doors with switches from SVG map data.
  • Usage Examples

    Basic Movement to Target

    
    import Clayground.Behavior
    import Clayground.Physics
    
    RectBoxBody {
        id: enemy
        bodyType: Body.Kinematic
        
        MoveTo {
            world: theWorld
            destXWu: player.xWu
            destYWu: player.yWu
            running: true
            desiredSpeed: 3
            onArrived: console.log("Reached target!")
        }
    }
    

    Path Patrol

    
    import Clayground.Behavior
    
    RectBoxBody {
        id: guard
        bodyType: Body.Kinematic
        
        FollowPath {
            world: theWorld
            wpsWu: [
                Qt.point(5, 5),
                Qt.point(10, 5),
                Qt.point(10, 10),
                Qt.point(5, 10)
            ]
            repeat: true
            running: true
            debug: true
        }
    }
    

    Creating Triggers

    
    import Clayground.Behavior
    
    RectTrigger {
        xWu: 10
        yWu: 10
        widthWu: 2
        heightWu: 2
        visible: true
        color: "yellow"
        opacity: 0.5
        
        onEntered: (entity) => {
            console.log("Entity entered:", entity)
            // Trigger game logic
        }
    }
    

    Automated Door System

    
    import Clayground.Behavior
    import Clayground.World
    
    ClayWorld2d {
        id: theWorld
        
        // Door builder automatically creates doors from map data
        DoorBuilder {
            world: theWorld
        }
        
        // Map should contain groups named "door*" with:
        // - Door entities (component: "Door")
        // - DoorOpener entities (component: "DoorOpener")
        // - Polyline paths for door movement
    }
    

    Responding to World Changes

    
    import Clayground.Behavior
    
    Item {
        WorldChangedConnections {
            world: theWorld
            callback: function() {
                // Recalculate positions when world dimensions change
                updateEntityPositions()
            }
        }
    }
    

    Best Practices

    1. Performance: Use running property to disable behaviors when not needed to save CPU cycles. 2. Debug Visualization: Enable debug property during development to visualize paths and destinations. 3. Collision Setup: Ensure proper collision categories are set for triggers and moving entities. 4. Path Design: Keep waypoints reasonable distances apart for smooth movement. 5. World Units: Always use world units (Wu) for positions and dimensions to maintain consistency.

    Technical Implementation

    The Clay Behavior plugin implements several patterns:
  • Physics-Based Movement: MoveTo uses Box2D's kinematic bodies with velocity adjustments
  • Waypoint System: FollowPath manages sequential waypoint navigation
  • Trigger System: RectTrigger uses Box2D sensors for enter detection
  • Builder Pattern: DoorBuilder demonstrates complex object assembly from map data
  • The plugin integrates tightly with Clay World for coordinate systems and Clay Physics for collision detection and movement.