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
-
Performance: Use
runningproperty to disable behaviors when not needed to save CPU cycles. -
Debug Visualization: Enable
debugproperty during development to visualize paths and destinations. -
Collision Setup: Ensure proper collision categories are set for triggers and moving entities.
-
Path Design: Keep waypoints reasonable distances apart for smooth movement.
-
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.