1 个不稳定版本

使用旧的Rust 2015

0.1.0 2018年5月8日

#11#转换

MIT/Apache

15KB
228

machinae

machinae是一个泛型状态机,主要用于游戏开发。

如有需要,请在rust-gamedev Gitter频道寻求帮助。

贡献

贡献非常受欢迎!如果您需要其他功能,请创建一个问题。如果您想帮忙,也可以选择一个“帮助所需”的问题。如果您需要任何帮助,请随时提问!

所有贡献均假设根据MIT/Apache-2双授权协议进行。

许可协议

machinae根据MIT许可协议和Apache许可协议(版本2.0)的条款进行分发。

LICENSE-APACHELICENSE-MIT


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;
}

无运行时依赖