1个不稳定版本

0.1.0 2019年10月15日

#895游戏开发

MIT/Apache

36KB
604

Latest release on crates.io Documentation on docs.rs

amethyst-console

围绕cvarimgui的一个框架,允许您以用户可配置的方式轻松地在运行时修改系统配置。

preview

示例

  • width 120 - 将宽度设置为120
  • width - 打印当前宽度
  • 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