1个不稳定版本
0.1.0 | 2019年10月15日 |
---|
#895 在 游戏开发
36KB
604 行
amethyst-console
围绕cvar
和imgui
的一个框架,允许您以用户可配置的方式轻松地在运行时修改系统配置。
示例
width 120
- 将宽度设置为120width
- 打印当前宽度reset width
- 将宽度重置为其默认值(100)find a
- 查找所有名称中包含a
的命令reset
- 将所有变量重置为其默认值
设置
将其添加到您的Cargo.toml
[dependencies]
amethyst-console = "0.1.0"
基本示例
创建您的配置
确保它支持默认特性
#[derive(Default)]
pub struct MyConfig {
pub height: f32,
pub width: f32,
}
实现访问特性
impl IVisitExt for MyConfig {
fn visit_mut_ext(&mut self, f: &mut dyn FnMut(&mut dyn cvar::INode), _console: &mut dyn IConsoleExt) {
// You can add variables
f(&mut cvar::Property("width", "Arena width", &mut self.width, 100);
// Or callable functions
f(&mut cvar::Action("color_test", "Test console colors", |_, _| color_test(console)));
}
}
创建一个系统
- 使用类型参数调用
create_system
以指定您的配置名称。
/// This will:
/// - Initialize the struct to its default value
/// - Add it to the world so other services can read in their run loops
/// - Create a console window with everything added by `visit_mut_ext`
let console_system = imgui_console::create_system::<MyConfig>();
- 将系统添加到您的应用程序初始化中。
let game_data = GameDataBuilder::default()
.with_system_desc(console_system, "imgui_console", &[]) // <--- ADDED
// ....
在您的系统中使用配置
impl<'s> System<'s> for ExampleSystem {
// Use Read to grab the resource from the World
type SystemData = (
Read<'s, GameConfig>,
);
fn run(&mut self, (game_config, ): Self::SystemData) {
// This print statement will change the moment a user types a set command,
println!("width={}", &config.width);
}
}
添加控制台绑定
更新您的input.ron
文件。这将使用户能够打开/关闭控制台。
(
axes: {},
actions: {
"toggle_console": [[Key(Escape)]],
},
)
完成
就这么多。您的系统现在可以通过用户发起的命令进行配置了。祝您玩得开心!
有关带有更多注释的完整示例,请参阅examples/demo_console.rs
。
独立使用
- 禁用
amethyst-system
功能。
[dependencies.amethyst-console ]
version = "0.1.0"
default-features = false
features = []
- 创建控制台窗口和您的配置
let mut console = imgui_console::create_console();
let mut config = MyConfig::default();
- 在渲染循环中调用构建
let ui: imgui::Ui = ... ;
loop {
// Some other redering code
// ...
// Draw the console.
// Pass in the config you would like to be updated.
let window = imgui::Window::new(im_str!("Console")).opened(&mut self.open);
conosle.build(ui, window, &mut config);
}
依赖关系
~13–31MB
~457K SLoC