#file-dialog #dialog #bevy #file #file-content #filesystem #save-file

bevy_file_dialog

使用Bevy游戏引擎加载和保存文件的文件系统对话框

8个版本 (5个破坏性更新)

0.6.0 2024年7月14日
0.5.0 2024年3月11日
0.4.0 2024年2月22日
0.3.2 2024年2月3日
0.1.0 2023年11月24日

#220 in 游戏开发

Download history 15/week @ 2024-04-18 14/week @ 2024-04-25 6/week @ 2024-05-02 3/week @ 2024-05-23 16/week @ 2024-05-30 21/week @ 2024-06-06 26/week @ 2024-06-13 15/week @ 2024-06-20 13/week @ 2024-06-27 36/week @ 2024-07-04 108/week @ 2024-07-11 16/week @ 2024-07-18 67/week @ 2024-07-25 22/week @ 2024-08-01

214 每月下载量

MIT/Apache

39KB
411

bevy_file_dialog

crates.io docs.rs

一个用于使用系统对话框加载和保存文件的Bevy游戏引擎插件。

用法

请参见下面的用法说明以及示例(单独的加载/保存对话框)。此示例也存在于示例中,您可以使用cargo run --example save_and_load运行它。

use bevy::prelude::*;
use bevy_file_dialog::prelude::*;

struct TextFileContents;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // Add the file dialog plugin
        .add_plugins(
            FileDialogPlugin::new()
                // allow saving of files marked with TextFileContents
                .with_save_file::<TextFileContents>()
                // allow loading of files marked with TextFileContents
                .with_load_file::<TextFileContents>(),
        )
        .add_systems(Startup, setup)
        .add_systems(
            Update,
            (
                dialog,
                file_loaded,
                file_saved,
                file_load_canceled,
                file_save_canceled,
            ),
        )
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2dBundle::default());
}

fn dialog(mut commands: Commands, keys: Res<ButtonInput<KeyCode>>) {
    // Ctrl+S - save file
    // Ctrl+O - load file

    if keys.any_pressed([KeyCode::ControlLeft, KeyCode::ControlRight]) {
        if keys.just_pressed(KeyCode::S) {
            // save contents to selected file
            commands
                .dialog()
                .add_filter("Text", &["txt"])
                .set_file_name("hello.txt")
                .save_file::<TextFileContents>(b"hello".to_vec());
        } else if keys.just_pressed(KeyCode::O) {
            // read contents from selected file
            commands
                .dialog()
                .add_filter("Text", &["txt"])
                .load_file::<TextFileContents>();
        }
    }
}

fn file_loaded(mut ev_loaded: EventReader<DialogFileLoaded<TextFileContents>>) {
    for ev in ev_loaded.read() {
        eprintln!(
            "Loaded file {} with contents '{}'",
            ev.file_name,
            std::str::from_utf8(&ev.contents).unwrap()
        );
    }
}

fn file_load_canceled(mut ev_canceled: EventReader<DialogFileLoadCanceled<TextFileContents>>) {
    for _ in ev_canceled.read() {
        eprintln!("Text file content load canceled");
    }
}

fn file_saved(mut ev_saved: EventReader<DialogFileSaved<TextFileContents>>) {
    for ev in ev_saved.read() {
        match ev.result {
            Ok(_) => eprintln!("File {} successfully saved", ev.file_name),
            Err(ref err) => eprintln!("Failed to save {}: {}", ev.file_name, err),
        }
    }
}

fn file_save_canceled(mut ev_canceled: EventReader<DialogFileSaveCanceled<TextFileContents>>) {
    for _ in ev_canceled.read() {
        eprintln!("Text file content save canceled");
    }
}

Linux和BSD上的文件对话框

您可以在Linux上使用两个后端之一创建文件对话框,该对话框由特性指定,即gtk3xdg-portal。默认情况下,bevy_file_dialog使用由rfd提供的默认值,即xdg-portal。您可以通过在Cargo.toml中指定正确的特性来更改此设置。

bevy_file_dialog = { version = "*", default-features = false, features = ["gtk3"] }

更多信息请参阅rfd文档,那里的信息与bevy_file_dialog匹配。


bevy bevy_file_dialog
0.14 0.6.0
0.13 0.4.0 - 0.5.0
0.12 0.1.0 - 0.3.1

依赖关系

~8–22MB
~309K SLoC