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次下载
73KB
1.5K SLoC
bevy_logic
Bevy的逻辑门模拟插件。
功能
- 用于排序(可能为循环的)逻辑门电路的
LogicGraph
资源。 - 一个固定时间步长的
LogicUpdate
调度,与Bevy的FixedUpdate
类似。 - 对
Signal
的三元方法,允许非布尔电路和模拟机器。 LogicGate
trait查询。- 用于简化门层次结构构建的
World
和Commands
的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(¬_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