An implementation of steering behaviors for Flame Behaviors.
steering_behaviors
An implementation of steering behaviors for Flame Behaviors. See Steering Behaviors For Autonomous Characters by Craig Reynolds for an in-depth explanation
Developed with 💙 and 🔥 by Very Good Ventures 🦄
Installation 💻
flutter pub add flame_steering_behaviors
Usage ✨
This package is built on top of the
flame_behaviors, if you are not
yet familiar with it, we recommend reading up on the documentation of that
package first.
Steerable
If you want to apply steering behaviors to your entities you have to add the
Steerable mixin to your entity class:
class MyEntity extends Entity with Steerable {
/// Provide the max velocity this entity can hold.
double get maxVelocity => 100;
...
}
The Steerable mixin provides a velocity value to your entity, this
velocity will then be applied on each update cycle to your entity until the
velocity becomes zero.
Steering Behaviors
Each algorithm defined by this project is available as a Behavior and you
can add them to your steerable entities as you would with any
behavior:
class MyEntity extends Entity with Steerable {
MyEntity()
: super(
behaviors: [
WanderBehavior(
circleDistance: 200,
maximumAngle: 45 * degrees2Radians,
startingAngle: 0,
),
],
);
...
}
Some steering behaviors require information that is not always available on
entity creation, when that happens we recommend using the entity's onLoad
method:
class MyEntity extends Entity with Steerable {
...
@override
Future<void> onLoad() async {
world.children.register<MyOtherEntity>();
await add(
SeparationBehavior(
world.children.query<MyOtherEntity>(),
maxDistance: 25,
maxAcceleration: 1000,
),
);
}
...
}
Libraries
- flame_steering_behaviors
- Flame Steering Behaviors brings steering algorithms to the behavior pattern, originally built by Very Good Ventures.