#events #ecs #specs #event-handling

shrev

事件通道,用于与specs一起使用

19个版本 (5个稳定版)

1.1.3 2022年6月4日
1.1.1 2019年5月4日
1.0.1 2018年5月13日
0.8.2 2018年4月24日
0.6.0 2017年10月6日

#202 in 游戏开发

Download history 1879/week @ 2024-04-20 2009/week @ 2024-04-27 2009/week @ 2024-05-04 1960/week @ 2024-05-11 1913/week @ 2024-05-18 1951/week @ 2024-05-25 2239/week @ 2024-06-01 1295/week @ 2024-06-08 1934/week @ 2024-06-15 1958/week @ 2024-06-22 1105/week @ 2024-06-29 1047/week @ 2024-07-06 2340/week @ 2024-07-13 1783/week @ 2024-07-20 1861/week @ 2024-07-27 1484/week @ 2024-08-03

每月下载量7,606
118个库中使用(11个直接使用)

MIT/Apache许可

43KB
954

shrev

crates.io badge docs badge

一个基于拉取的事件通道,事件存储在环形缓冲区中,旨在作为资源在specs中使用。

示例用法

extern crate shrev;

use shrev::EventChannel;

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TestEvent {
    data: u32,
}

fn main() {
    let mut channel = EventChannel::new();

    channel.drain_vec_write(&mut vec![TestEvent { data: 1 }, TestEvent { data: 2 }]);

    let mut reader_id = channel.register_reader();

    // Should be empty, because reader was created after the write
    assert_eq!(
        Vec::<TestEvent>::default(),
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );

    // Should have data, as a second write was done
    channel.single_write(TestEvent { data: 5 });

    assert_eq!(
        vec![TestEvent { data: 5 }],
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );

    // We can also just send in an iterator.
    channel.iter_write(
        [TestEvent { data: 8 }, TestEvent { data: 9 }]
            .iter()
            .cloned(),
    );

    assert_eq!(
        vec![TestEvent { data: 8 }, TestEvent { data: 9 }],
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );
}

许可证

shrev-rs是免费且开源软件,根据MIT许可证和Apache许可证2.0条款分发。

除非你明确表示,否则任何有意提交到作品中的贡献,根据Apache-2.0许可证定义,将作为上述许可证双重许可,不附加任何额外条款或条件。

无运行时依赖