immediate_stats 0.5.0

Game stats that reset every frame, inspired by immediate mode GUI.
Documentation
//! Tests the reset systems and `PauseStatReset`.
#![cfg(feature = "bevy")]

use bevy_ecs::prelude::*;
use immediate_stats::*;

#[derive(Component, Resource, StatContainer, PartialEq, Debug, Clone)]
struct Health(Stat);

#[test]
fn reset_component() {
    let mut world = World::new();
    let system = world.register_system(reset_component_modifiers::<Health>);

    let entity = world
        .spawn(Health(Stat {
            base: 100,
            bonus: 50,
            multiplier: 2.0,
        }))
        .id();

    world.run_system(system).unwrap();

    assert_eq!(
        world.get::<Health>(entity),
        Some(Health(Stat::new(100))).as_ref()
    );
}

#[test]
fn pause_component() {
    let mut world = World::new();
    let system = world.register_system(reset_component_modifiers::<Health>);

    let health = Health(Stat {
        base: 100,
        bonus: 50,
        multiplier: 2.0,
    });

    let entity = world.spawn((health.clone(), PauseStatReset)).id();

    world.run_system(system).unwrap();

    assert_eq!(world.get::<Health>(entity), Some(health).as_ref());
}

#[test]
fn reset_resource() {
    let mut world = World::new();
    let system = world.register_system(reset_resource_modifiers::<Health>);

    world.insert_resource(Health(Stat {
        base: 100,
        bonus: 50,
        multiplier: 2.0,
    }));

    world.run_system(system).unwrap();

    assert_eq!(
        world.get_resource::<Health>(),
        Some(Health(Stat::new(100))).as_ref()
    );
}

#[test]
fn reset_resource_not_present() {
    let mut world = World::new();
    let system = world.register_system(reset_resource_modifiers::<Health>);
    world.run_system(system).unwrap();
}