#gate #circuit #bevy #logic #time-step

bevy_logic

Bevy的逻辑门模拟插件

10个版本 (5个重大变更)

0.6.0 2024年5月8日
0.5.1 2024年5月3日
0.4.0 2024年4月29日
0.3.2 2024年4月25日
0.1.1 2024年4月20日

#342模拟

每月47次下载

MIT 协议

73KB
1.5K SLoC

bevy_logic

Crates.io docs license Crates.io

Bevy的逻辑门模拟插件。

功能

  • 用于排序(可能为循环的)逻辑门电路的LogicGraph资源。
  • 一个固定时间步长的LogicUpdate调度,与Bevy的FixedUpdate类似。
  • Signal的三元方法,允许非布尔电路和模拟机器。
  • LogicGate trait查询。
  • 用于简化门层次结构构建的WorldCommands的Builder traits。
  • 用于同步图与游戏世界的Command
  • 模块化插件设计。选择你需要的功能。

运行示例

cargo run --release --example cycles

快速入门

LogicSimulationPlugin添加到您的应用程序中,并配置Time<LogicStep>资源以在所需速度上滴答。

const STEPS_PER_SECOND: f64 = 30.0;
app.add_plugins(LogicSimulationPlugin)
    .insert_resource(Time::<LogicStep>::from_hz(STEPS_PER_SECOND));

自定义逻辑门

您可以通过实现LogicGate trait来创建自己的逻辑门...

use bevy_logic::prelude::*;

/// The XOR gate emits a signal if the number of "truthy" inputs is odd.
#[derive(Component, Clone, Copy, Debug, Default, Reflect)]
pub struct XorGate;

impl LogicGate for XorGate {
    fn evaluate(&mut self, inputs: &[Signal], outputs: &mut [Signal]) {
        let signal: Signal = inputs
            .iter()
            .filter(|s| s.is_truthy())
            .count()
            .is_odd()
            .into();

        outputs.set_all(signal);
    }
}

然后使用bevy_trait_query将组件注册...

struct CustomLogicPlugin;

impl Plugin for CustomLogicPlugin {
    fn build(&self, app: &mut App) {
        app.register_logic_gate::<XorGate>();
    }
}

您可以使用logic::commands模块来生成门和风扇,然后使用电线连接风扇。确保编译逻辑图。

fn spawn_custom_gate(mut commands: Commands, mut sim: ResMut<LogicGraph>) {
    let xor_gate = commands
        .spawn_gate((Name::new("XOR"), XorGate))
        .with_inputs(2)
        .with_outputs(1)
        .build();

    let not_gate = commands
        .spawn_gate((Name::new("NOT"), NotGate))
        .with_inputs(1)
        .with_outputs(1)
        .build();

    let wire = commands.spawn_wire(&not_gate, 0, &xor_gate, 0).downgrade();

    sim.add_data(vec![xor_gate, not_gate]).add_data(wire).compile();
}

Bevy兼容性

bevy bevy_logic
0.13.2 0.5.x

依赖项

~19–46MB
~730K SLoC