#imgui #game #blue-engine

blue_engine_imgui

Blue Engine的ImGUI库

3个不稳定版本

0.3.1 2022年10月11日
0.3.0 2022年10月11日
0.1.0 2022年10月8日

#1594 in 游戏开发

Apache-2.0

125KB
272

Blue Engine ImGUI插件

这是一个插件,它为ImGUI添加了对Blue Engine的支持。

入门指南

要开始使用,创建一个将包含您的GUI代码的新结构体。在我们的例子中

struct Counter {
    count: u16
}

然后我们将实现插件的Gui特质

impl Gui for MyGUI {
    // This is the starting point for your UI code, it passes almost all variables of the engine as well
    fn update(
        // for accessing the values
        &mut self,
        // We can add underscore to ones we don't use, so they won't emit warnings
        _window: &mut blue_engine::Window,
        _renderer: &mut blue_engine::Renderer,
        _objects: &mut std::collections::HashMap<&'static str, blue_engine::Object>,
        _camera: &mut blue_engine::Camera,
        _input: &blue_engine::InputHelper,
        _plugin_data_storage: &mut std::collections::HashMap<&'static str, Box<dyn std::any::Any>>,
        ui: &blue_engine_imgui::winit::Ui,
    ) {
        /* Your UI code goes here */
    }
}

最后是您的ImGUI代码

// Create a new imgui window to contain the UI
gui::Window::new("Counter Window").build(ui, || {
    // Add a text to display the counter
    ui.text(format!("The count is at: {}", self.count));
    
    // + 1 per click
    if ui.button("Add 1") {
        self.count += 1;
    }
});

还有最后一步才能使插件工作。我们需要在更新循环之前初始化插件

let gui_context = blue_engine_imgui::ImGUI::new(&engine.window, &mut engine.renderer, Box::new(MyGui {count: 0}));

这将基本上初始化imgui并创建运行插件所需的东西。然后引擎将运行两次,一次在所有其他之前以获取所有输入和事件,然后在渲染期间,以便显示GUI。剩下的就是将插件添加到引擎中

engine.plugins.push(Box::new(gui_context));

恭喜,您已经拥有了一个工作的GUI!

样式块

指南即将推出,我保证它很酷!

示例

请检查示例文件夹,以获取潜在的UI和您新项目的模板。

依赖理由

  • blue_engine:显然用于导出设计API所需的某些组件和结构声明
  • imgui-wgpu:用于将ImGUI应用于wgpu图形后端。这是Blue Engine中使用的相同的图形后端
  • imgui-winit-support:Winit窗口支持。这是Blue Engine中使用的相同的窗口系统
  • imgui:ImGUI本身,用于获取设计API所需的组件和声明

依赖项

~33–67MB
~1M SLoC