2 releases
Uses new Rust 2024
new 0.1.2 | May 2, 2025 |
---|---|
0.1.1 | May 2, 2025 |
0.1.0 |
|
#464 in Game dev
43 downloads per month
25KB
267 lines
Immediate Stats
Game stats that reset every frame, inspired by immediate mode rendering.
This makes it easy to implement temporary buffs/debuffs, and effects that change over time. Using a derive macro, stat resets are propagated to any stat fields, making it easy to compose stats into more complex objects.
#[derive(StatContainer)]
struct Speed(Stat);
fn main() {
let mut speed = Speed(Stat::new(10)); // Set base speed to 10.
loop {
speed.0 *= 2.0; // Applies a multiplier to the final result.
speed.0 += 5; // Adds a bonus to the final result.
// The order does not matter, bonuses are always applied before multipliers.
assert_eq!(speed.0.total(), 30); // (10 + 5) * 2 = 30
speed.reset_modifiers(); // Reset bonus and multiplier, so speed is back to 10.
}
}
Bevy
There is build-in integration with the Bevy Engine via the bevy
feature flag.
This adds plugins for resetting StatContainer
components and resources.
#[derive(StatContainer, Component, Resource)]
struct Speed(Stat);
fn main() {
App::new()
.add_plugins((
ImmediateStatsPlugin,
ResetComponentPlugin::<Speed>::new(),
ResetResourcePlugin::<Speed>::new(),
))
.run();
}
Bevy Butler
If you use Bevy Butler, you can also use the bevy_butler
feature flag.
This automatically registers the required system(s) using the add_component
attribute
or the existing insert_resource
macro.
fn main() {
App::new().add_plugins((ImmediateStatsPlugin, MyPlugin)).run();
}
#[butler_plugin]
struct MyPlugin;
// `StatContainer` derive adds the `add_component` attribute
// and hooks into the existing `insert_resource` macro.
#[derive(StatContainer, Component, Resource)]
#[add_component(plugin = MyPlugin)] // Adds `reset_component_modifiers` system.
#[insert_resource(plugin = MyPlugin)] // Adds `reset_resource_modifiers` system.
struct Speed(Stat);
Version Compatibility
Bevy | Immediate Stats |
---|---|
0.16 |
0.1 |
Dependencies
~0.6–11MB
~108K SLoC