boids icon indicating copy to clipboard operation
boids copied to clipboard

Boid Flocking Simulation

Boid Flocking Behaviour

This program is an implementation of a boid flocking behaviour simulation. Features include basic boid rules (alignment, cohersion, separation), obstacle avoidance, and food sources.

The implementation is written in Lua and uses the LOVE framework (http://love2d.org).

Description of Important Files: objects/boid.lua
- Routines for updating orientation and position of a single boid

objects/boid_graphic.lua
- Routines for handling drawing of the boid triangle graphic.

objects/seeker.lua - A point that steers towards a target. Based on Craig Reynold's steering behaviour (http://www.red3d.com/cwr/steer/). Used to help boids steer towards a target.

objects/flock.lua
- Manages a flock of boids. Handles adding and removing boids, flockmate queries, and boid graphics.

objects/flock_interface.lua - A user interface to the flock object. Handles mouse input for selection of boids and setting a boid's waypoint.

objects/boid_emitter.lua - spawns boids at a specified rate. Boids are spawned within a specified radius of a point on a plane.

objects/boid_food_source.lua - Manages multiple food resources and their depletion. Handles updates to the polygonizer and field functions as boids "eat" the resources.

objects/implicit_point.lua - primitive for the field function of a point

objects/implicit_line.lua - primitive for the field function of a line

objects/implicit_rectangle.lua - primitive for the field function of a rectangle

objects/implicit_primitive_set.lua - manages a set of primitives. Handles adding/removing primitives and evaluating field functions using either basic summation or Ricci blend.

objects/polygonizer.lua - A 2d implicit surface polygonizer. Handles polygonization of a set of primitives. Uses continuation algorithm to find boudary of surface. Constructs polygonized data for use with collisions and graphics drawing.

objects/collider.lua - A fixed grid spatial partition. Handles insertion/deletion/updates of points and axis-aligned bounding boxes. Used for querying boids in a flock and primitives for the polygonizer.

states/* - Directory contains all states of the program (slides and interactive demos). Each state contains load, update, draw and user input callbacks.