1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年5月8日 |
---|
#11 在 #转换
15KB
228 行
machinae
machinae
是一个泛型状态机,主要用于游戏开发。
如有需要,请在rust-gamedev Gitter频道寻求帮助。
贡献
贡献非常受欢迎!如果您需要其他功能,请创建一个问题。如果您想帮忙,也可以选择一个“帮助所需”的问题。如果您需要任何帮助,请随时提问!
所有贡献均假设根据MIT/Apache-2双授权协议进行。
许可协议
machinae
根据MIT许可协议和Apache许可协议(版本2.0)的条款进行分发。
lib.rs
:
machinae
machinae
提供了一个高效泛型状态机。它默认期望您使用枚举作为状态,但您也可以通过使用Dyn*
类型来处理特质对象。
use machinae::{State, StateMachine, Trans};
struct Event {}
enum HelloState {
Hello,
Bye,
}
impl State<i32, (), Event> for HelloState {
fn start(&mut self, number: i32) -> Result<Trans<Self>, ()> {
match *self {
HelloState::Hello => println!("Hello, {}", number),
HelloState::Bye => println!("Bye, {}", number),
}
Ok(Trans::None)
}
fn update(&mut self, number: i32) -> Result<Trans<Self>, ()> {
match *self {
HelloState::Hello => {
if number == 5 {
Ok(Trans::Switch(HelloState::Bye))
} else {
Ok(Trans::None)
}
}
HelloState::Bye => {
if number == 10 {
Ok(Trans::Quit)
} else {
Ok(Trans::None)
}
}
}
}
}
let mut machine = StateMachine::new(HelloState::Hello);
machine.start(314).unwrap();
let mut counter = 1;
while machine.running() {
machine.update(counter).unwrap();
counter += 1;
}