# Introduction

**Crowd Toolkit** is an Unreal Engine 5 plugin for high-performance crowd movement in
RTS-style games: thousands of agents moving as groups under a single order, with
flow-field and grid A\* pathfinding, local avoidance, formations, runtime walls and
per-agent speed - fully **Blueprint and C++ scriptable**.

## Live demo

Try the crowd simulation right in your browser. Every setting maps to a property on the crowd actor.

<iframe
  src="https://jbernardic.github.io/crowd-sim-demo/"
  title="Crowd Toolkit live crowd simulation demo"
  width="100%"
  height="540"
  loading="lazy"
  style="border:1px solid #2b2b2b; border-radius:8px;"
  allowfullscreen>
</iframe>

[Open the demo in a new tab](https://jbernardic.github.io/crowd-sim-demo/)

## Features

 - **Group movement** - order any selection into a **formation** (blob, box, wedge) with one call; the whole group shares one path
 - **Two pathfinding backends** - per-goal **flow field** (cheap for big groups to a shared goal) or **Spatial A\*** (per-agent routes), both routing around walls
 - **Local avoidance** - agents flow past each other and around settled units instead of stacking up
 - **Runtime walls** - block movement with a wall grid, seeded from the level's **nav mesh** or stamped tile-by-tile at runtime
 - **Per-agent speed** - override max speed per unit (or per group) on top of the global default
 - **Movement events** - `OnAgentsReachedGoal`, `OnAgentsStuck`, `OnAgentsOrdersCanceled`, plus spawn/remove notifications
 - **Selection queries** - marquee select straight from a screen rect, or query agents in a world rect or radius, in one C++ pass
 - **Ground snapping** - the 2D simulation is glued to your terrain with per-agent Z tracking and optional slope alignment
 - **Stable per-agent ids** - track a unit across removals even though indices reshuffle
 - **Bulk Blueprint nodes** - turn the crowd's position/transform arrays into instanced-mesh transforms with no graph-side loop

## Performance notes

The simulation runs on the game thread and operates on a single 2D plane (multi-floor
maps are not yet supported). Agent radius and the global speed default are shared; per-agent
speed overrides are available, per-agent radius is on the roadmap. See [Limitations](concepts/07-limitations.md).
