bevy_input_prompts/
lib.rs

1#![no_std]
2extern crate alloc;
3use alloc::{format, string::String};
4
5pub use fs_extra::error::Error as CopyAssetsError;
6
7pub mod gamepad_brand;
8
9mod char;
10mod gamepad_axis;
11mod gamepad_button;
12mod key;
13mod key_code;
14mod keyboard_input;
15mod mouse_button;
16
17#[cfg(feature = "kenney_input_prompts")]
18pub use kenney_input_prompts::tokenize_dir::_kenney_input_prompts_1_4 as kenney_tokenize;
19#[cfg(feature = "xelu_free_controller_key_prompts")]
20pub use xelu_free_controller_key_prompts::tokenize_dir::_Xelu_Free_Controller_Key_Prompts as xelu_tokenize;
21
22#[derive(Clone, Copy)]
23pub enum Pack {
24    #[cfg(feature = "kenney_input_prompts")]
25    Kenney,
26    #[cfg(feature = "xelu_free_controller_key_prompts")]
27    Xelu,
28}
29
30pub fn first_file_path(pack: Pack, files: impl tokenize_dir::ToConstraints) -> Option<String> {
31    let file_index = tokenize_dir::first_value_nonstrict(files.to_constraints())?;
32    Some(format!(
33        "bevy_input_prompts/{}",
34        match pack {
35            #[cfg(feature = "kenney_input_prompts")]
36            Pack::Kenney => kenney_input_prompts::tokenize_dir::FILE_PATHS.get(file_index)?,
37
38            #[cfg(feature = "xelu_free_controller_key_prompts")]
39            Pack::Xelu =>
40                xelu_free_controller_key_prompts::tokenize_dir::FILE_PATHS.get(file_index)?,
41        }
42    ))
43}
44
45pub fn copy_assets() -> Result<(), CopyAssetsError> {
46    #[cfg(feature = "kenney_input_prompts")]
47    kenney_input_prompts::copy_assets("assets/bevy_input_prompts")?;
48    #[cfg(feature = "xelu_free_controller_key_prompts")]
49    xelu_free_controller_key_prompts::copy_assets("assets/bevy_input_prompts")?;
50    Ok(())
51}
52
53pub trait FileConstraints: Sized {
54    type Constraints<'c>: tokenize_dir::ToConstraints;
55    fn file_constriants<'c>(self, pack: Pack) -> Self::Constraints<'c>;
56    // we also have this so the suer doesn't have to do .file_path_extra::<&[&[usize]]>(pack, &[])
57    // just to leave it without any extra contraints
58    // because the compiler won't apply a relevant type to &[]
59    fn file_path(
60        self,
61        pack: Pack,
62    ) -> Option<String> {
63        first_file_path(pack, self.file_constriants(pack))
64    }
65    fn file_path_extra(
66        self,
67        pack: Pack,
68        extra_contraints: impl tokenize_dir::ToConstraints,
69    ) -> Option<String> {
70        first_file_path(pack, (self.file_constriants(pack), extra_contraints))
71    }
72}