diff --git a/Cargo.lock b/Cargo.lock index 5aebdae..f3f029e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -273,11 +273,11 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock 3.1.2", + "async-lock 3.2.0", "async-task", "concurrent-queue", "fastrand 2.0.1", - "futures-lite 2.0.1", + "futures-lite 2.1.0", "slab", ] @@ -304,9 +304,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.1.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea8b3453dd7cc96711834b75400d671b73e3656975fa68d9f277163b7f7e316" +checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" dependencies = [ "event-listener 4.0.0", "event-listener-strategy", @@ -1317,11 +1317,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ "async-channel 2.1.1", - "async-lock 3.1.2", + "async-lock 3.2.0", "async-task", "fastrand 2.0.1", "futures-io", - "futures-lite 2.0.1", + "futures-lite 2.1.0", "piper", "tracing", ] @@ -1468,9 +1468,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] @@ -2058,14 +2058,13 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" dependencies = [ "fastrand 2.0.1", "futures-core", "futures-io", - "memchr", "parking", "pin-project-lite", ] @@ -2418,9 +2417,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" dependencies = [ "either", ] @@ -2569,17 +2568,17 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "leafwing-input-manager" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5730f7b7b516b7ede475443aca506769e7527b576975133d97d6d912ece4d2" +checksum = "61e0ad1622a1664b055990aac9efd90a9012b82737847e6a85d36ce38d2bf7c4" dependencies = [ "bevy", "derive_more", "fixedbitset", "itertools", "leafwing_input_manager_macros", + "multimap", "once_cell", - "petitset", "serde", ] @@ -2787,6 +2786,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "multimap" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1a5d38b9b352dbd913288736af36af41c48d61b1a8cd34bcecd727561b7d511" +dependencies = [ + "serde", +] + [[package]] name = "naga" version = "0.13.0" @@ -3318,15 +3326,6 @@ dependencies = [ "indexmap 2.1.0", ] -[[package]] -name = "petitset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1a50d821a2526af6d5756c23c68e453532a986e361a3e12c9cc7fe61d862ac" -dependencies = [ - "serde", -] - [[package]] name = "pin-project-lite" version = "0.2.13" @@ -3808,9 +3807,9 @@ dependencies = [ [[package]] name = "spade" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d3bf265ec2d5dd1ddf87863252123447c550491adba2c70c574173a95cd8ba" +checksum = "87a3ef2efbc408c9051c1a27ce7edff430d74531d31a480b7ca4f618072c2670" dependencies = [ "hashbrown 0.14.3", "num-traits", @@ -4888,18 +4887,18 @@ checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" [[package]] name = "zerocopy" -version = "0.7.27" +version = "0.7.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18" +checksum = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.27" +version = "0.7.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90" +checksum = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b" dependencies = [ "proc-macro2", "quote", diff --git a/assets/font/Kenney/Kenney Blocks.ttf b/assets/font/Kenney/Kenney Blocks.ttf deleted file mode 100644 index e26959f..0000000 Binary files a/assets/font/Kenney/Kenney Blocks.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Future Narrow.ttf b/assets/font/Kenney/Kenney Future Narrow.ttf deleted file mode 100644 index 42f2c33..0000000 Binary files a/assets/font/Kenney/Kenney Future Narrow.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Future.ttf b/assets/font/Kenney/Kenney Future.ttf deleted file mode 100644 index 1dbb2dd..0000000 Binary files a/assets/font/Kenney/Kenney Future.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney High Square.ttf b/assets/font/Kenney/Kenney High Square.ttf deleted file mode 100644 index cef588d..0000000 Binary files a/assets/font/Kenney/Kenney High Square.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney High.ttf b/assets/font/Kenney/Kenney High.ttf deleted file mode 100644 index 14f8b14..0000000 Binary files a/assets/font/Kenney/Kenney High.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Mini Square Mono.ttf b/assets/font/Kenney/Kenney Mini Square Mono.ttf deleted file mode 100644 index 33c1fd6..0000000 Binary files a/assets/font/Kenney/Kenney Mini Square Mono.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Mini Square.ttf b/assets/font/Kenney/Kenney Mini Square.ttf deleted file mode 100644 index 5f2c5bb..0000000 Binary files a/assets/font/Kenney/Kenney Mini Square.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Mini.ttf b/assets/font/Kenney/Kenney Mini.ttf deleted file mode 100644 index 5cbfd37..0000000 Binary files a/assets/font/Kenney/Kenney Mini.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Pixel Square.ttf b/assets/font/Kenney/Kenney Pixel Square.ttf deleted file mode 100644 index e540208..0000000 Binary files a/assets/font/Kenney/Kenney Pixel Square.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Pixel.ttf b/assets/font/Kenney/Kenney Pixel.ttf deleted file mode 100644 index e6978d7..0000000 Binary files a/assets/font/Kenney/Kenney Pixel.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Rocket Square.ttf b/assets/font/Kenney/Kenney Rocket Square.ttf deleted file mode 100644 index ca788bb..0000000 Binary files a/assets/font/Kenney/Kenney Rocket Square.ttf and /dev/null differ diff --git a/assets/font/Kenney/Kenney Rocket.ttf b/assets/font/Kenney/Kenney Rocket.ttf deleted file mode 100644 index ea53b8c..0000000 Binary files a/assets/font/Kenney/Kenney Rocket.ttf and /dev/null differ diff --git a/assets/font/PyriousPixel-B.ttf b/assets/font/PyriousPixel-B.ttf new file mode 100644 index 0000000..97682af Binary files /dev/null and b/assets/font/PyriousPixel-B.ttf differ diff --git a/assets/font/PyriousPixel-R.ttf b/assets/font/PyriousPixel-R.ttf new file mode 100644 index 0000000..a1df379 Binary files /dev/null and b/assets/font/PyriousPixel-R.ttf differ diff --git a/assets/font/PyriousPixel.aseprite b/assets/font/PyriousPixel.aseprite new file mode 100644 index 0000000..79b4f9f Binary files /dev/null and b/assets/font/PyriousPixel.aseprite differ diff --git a/assets/font/anna anthropy/Chubster.ttf b/assets/font/anna anthropy/Chubster.ttf deleted file mode 100644 index 325d6d9..0000000 Binary files a/assets/font/anna anthropy/Chubster.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/CryptOfTomorrow.ttf b/assets/font/anna anthropy/CryptOfTomorrow.ttf deleted file mode 100644 index 9f2d9c3..0000000 Binary files a/assets/font/anna anthropy/CryptOfTomorrow.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Floatpoints.ttf b/assets/font/anna anthropy/Floatpoints.ttf deleted file mode 100644 index aae4e3b..0000000 Binary files a/assets/font/anna anthropy/Floatpoints.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/FrogPrincess.ttf b/assets/font/anna anthropy/FrogPrincess.ttf deleted file mode 100644 index f8ec6b4..0000000 Binary files a/assets/font/anna anthropy/FrogPrincess.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/GhostButler.ttf b/assets/font/anna anthropy/GhostButler.ttf deleted file mode 100644 index 977d187..0000000 Binary files a/assets/font/anna anthropy/GhostButler.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Jaywalk.ttf b/assets/font/anna anthropy/Jaywalk.ttf deleted file mode 100644 index da121e9..0000000 Binary files a/assets/font/anna anthropy/Jaywalk.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/ListenHereMiss.ttf b/assets/font/anna anthropy/ListenHereMiss.ttf deleted file mode 100644 index e5489a7..0000000 Binary files a/assets/font/anna anthropy/ListenHereMiss.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Magic Forest.ttf b/assets/font/anna anthropy/Magic Forest.ttf deleted file mode 100644 index c4a46d9..0000000 Binary files a/assets/font/anna anthropy/Magic Forest.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/PlanetGemrule.ttf b/assets/font/anna anthropy/PlanetGemrule.ttf deleted file mode 100644 index 2b1b5f4..0000000 Binary files a/assets/font/anna anthropy/PlanetGemrule.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Slanted.ttf b/assets/font/anna anthropy/Slanted.ttf deleted file mode 100644 index 822909a..0000000 Binary files a/assets/font/anna anthropy/Slanted.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/TroubleBeneathTheDome.ttf b/assets/font/anna anthropy/TroubleBeneathTheDome.ttf deleted file mode 100644 index 784a092..0000000 Binary files a/assets/font/anna anthropy/TroubleBeneathTheDome.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/WildBillYonder.ttf b/assets/font/anna anthropy/WildBillYonder.ttf deleted file mode 100644 index 15cd692..0000000 Binary files a/assets/font/anna anthropy/WildBillYonder.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Witchqueen.ttf b/assets/font/anna anthropy/Witchqueen.ttf deleted file mode 100644 index 3b840bd..0000000 Binary files a/assets/font/anna anthropy/Witchqueen.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/Wizard's Manse.otf b/assets/font/anna anthropy/Wizard's Manse.otf deleted file mode 100644 index 9798ecc..0000000 Binary files a/assets/font/anna anthropy/Wizard's Manse.otf and /dev/null differ diff --git a/assets/font/anna anthropy/cyber-druids.ttf b/assets/font/anna anthropy/cyber-druids.ttf deleted file mode 100644 index 54db86a..0000000 Binary files a/assets/font/anna anthropy/cyber-druids.ttf and /dev/null differ diff --git a/assets/font/anna anthropy/dysin4mation.ttf b/assets/font/anna anthropy/dysin4mation.ttf deleted file mode 100644 index a63fd1a..0000000 Binary files a/assets/font/anna anthropy/dysin4mation.ttf and /dev/null differ diff --git a/mockup/editor_ui.png b/mockup/editor_ui.png index 1ee1e35..1804e41 100644 Binary files a/mockup/editor_ui.png and b/mockup/editor_ui.png differ diff --git a/src/camera.rs b/src/camera.rs index 088e8f8..386fd53 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -12,6 +12,9 @@ impl Plugin for CameraPlugin { } } +pub const CAMERA_WIDTH: f32 = 320.0; +pub const CAMERA_HEIGHT: f32 = 180.0; + fn spawn_camera(mut commands: Commands, mut root: ResMut) { root.camera = commands .spawn(( @@ -19,9 +22,9 @@ fn spawn_camera(mut commands: Commands, mut root: ResMut) { Camera2dBundle { projection: OrthographicProjection { near: -1000.0, - scaling_mode: ScalingMode::AutoMax { - max_width: 1920.0, - max_height: 1080.0, + scaling_mode: ScalingMode::Fixed { + width: CAMERA_WIDTH, + height: CAMERA_HEIGHT, }, ..default() }, diff --git a/src/debug.rs b/src/debug.rs index f9c72db..80bd8ee 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -98,7 +98,7 @@ impl Plugin for DebugPlugin { // Editor if self.editor { app.add_plugins(EditorPlugin::new().in_new_window(Window { - mode: WindowMode::BorderlessFullscreen, + mode: WindowMode::Windowed, title: "bevy_editor_pls".to_string(), focused: false, ..default() diff --git a/src/lib.rs b/src/lib.rs index 8a685bd..095dea3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,6 +38,7 @@ impl Plugin for AppPlugin { app.add_plugins(debug::DebugPlugin { ambiguity_detection: false, //editor: false, + start: state::AppState::TitleScreen, ..default() }); } diff --git a/src/state/end_screen.rs b/src/state/end_screen.rs index 6078743..8ed07d9 100644 --- a/src/state/end_screen.rs +++ b/src/state/end_screen.rs @@ -7,7 +7,7 @@ use leafwing_input_manager::prelude::*; use crate::config::Config; use crate::state::AppState; use crate::state::AppState::*; -use crate::ui::FONT_HANDLE; +use crate::ui::BOLD_FONT_HANDLE; use crate::AppRoot; pub struct EndScreenStatePlugin; @@ -34,7 +34,7 @@ impl Plugin for EndScreenStatePlugin { #[reflect(Resource)] pub struct EndScreenAssets {} -#[derive(Actionlike, Reflect, Clone)] +#[derive(Actionlike, Reflect, PartialEq, Eq, Hash, Clone)] enum EndScreenAction { Restart, Quit, @@ -81,7 +81,7 @@ fn enter_end_screen(mut commands: Commands, root: Res, config: Res, config: Res text: Text::from_section( "Loading...", TextStyle { - font: FONT_HANDLE, + font: BOLD_FONT_HANDLE, font_size: 64.0, color: config.fg_color, }, diff --git a/src/state/title_screen.rs b/src/state/title_screen.rs index c5ba2ca..2cded5a 100644 --- a/src/state/title_screen.rs +++ b/src/state/title_screen.rs @@ -9,6 +9,10 @@ use crate::config::Config; use crate::state::game::GameAssets; use crate::state::AppState; use crate::state::AppState::*; +use crate::ui::vh; +use crate::ui::vw; +use crate::ui::FontSize; +use crate::ui::BOLD_FONT_HANDLE; use crate::ui::FONT_HANDLE; use crate::AppRoot; @@ -37,13 +41,32 @@ impl Plugin for TitleScreenStatePlugin { } } -const TITLE: &str = "bevy_jam4"; +const TEXT_COLOR: Color = Color::rgb(0.149, 0.149, 0.149); +const TEXT_STYLE: TextStyle = TextStyle { + font: FONT_HANDLE, + font_size: 0.0, + color: TEXT_COLOR, +}; +const BOLD_TEXT_STYLE: TextStyle = TextStyle { + font: BOLD_FONT_HANDLE, + font_size: 0.0, + color: TEXT_COLOR, +}; +const BORDER_COLOR: Color = Color::rgb(0.510, 0.612, 0.769); +const BORDER_WIDTH: f32 = 2.0; +const BACKGROUND_COLOR: Color = Color::rgb(0.580, 0.682, 0.839); +const HEADER_BACKGROUND_COLOR: Color = Color::rgb(0.549, 0.647, 0.796); +const HEADER_FONT_SIZE: f32 = 12.0; +const HEADER_TEXT: &str = "Bevy Jam #4: The Game"; +const BODY_FONT_SIZE: f32 = 7.0; +const BODY_TEXT: &str = "Welcome to the fourth official Bevy Jam!\n \nIn this 9 day event, your goal is to make a game in Bevy Engine,\nthe free and open-source game engine built in Rust.\n \nThe theme is: That's a LOT of Entities!"; +const THEME: &str = "That's a LOT of Entities!"; #[derive(AssetCollection, Resource, Reflect, Default)] #[reflect(Resource)] pub struct TitleScreenAssets {} -#[derive(Actionlike, Reflect, Clone)] +#[derive(Actionlike, Reflect, PartialEq, Eq, Hash, Clone)] enum TitleScreenAction { Start, Quit, @@ -78,27 +101,99 @@ fn enter_title_screen(mut commands: Commands, root: Res, config: Res 0 { + sections.push(TextSection::new(THEME, BOLD_TEXT_STYLE)); + } + } + + commands + .spawn(( + Name::new(format!("BodyTextLine{}", i)), + TextBundle::from_sections(sections), + FontSize::new(vh(BODY_FONT_SIZE)), + )) + .set_parent(body_container); + } } fn exit_title_screen(mut commands: Commands, root: Res) { @@ -113,7 +208,7 @@ fn title_screen_action_start( ) { // Show loading screen only if assets are still loading let Progress { done, total } = progress.progress_complete(); - next_state.set(if done >= total { Game } else { LoadingScreen }); + //next_state.set(if done >= total { Game } else { LoadingScreen }); } fn title_screen_action_quit(mut app_exit: EventWriter) { diff --git a/src/ui/font.rs b/src/ui/font.rs index 96847d0..3f0624a 100644 --- a/src/ui/font.rs +++ b/src/ui/font.rs @@ -1,5 +1,6 @@ use bevy::asset::load_internal_binary_asset; use bevy::prelude::*; +use bevy::window::PrimaryWindow; pub struct FontPlugin; @@ -8,11 +9,59 @@ impl Plugin for FontPlugin { load_internal_binary_asset!( app, FONT_HANDLE, - "../../assets/font/Kenney/Kenney Future.ttf", + "../../assets/font/PyriousPixel-R.ttf", |bytes: &[u8], _path: String| Font::try_from_bytes(bytes.to_vec()).unwrap() ); + load_internal_binary_asset!( + app, + BOLD_FONT_HANDLE, + "../../assets/font/PyriousPixel-B.ttf", + |bytes: &[u8], _path: String| Font::try_from_bytes(bytes.to_vec()).unwrap() + ); + + app.register_type::() + .add_systems(Update, scale_font_size); } } pub const FONT_HANDLE: Handle = + Handle::weak_from_u128(303551798864246209986336759745415587961); +pub const BOLD_FONT_HANDLE: Handle = Handle::weak_from_u128(317423448069604009516378143395193332978); + +#[derive(Component, Reflect)] +pub struct FontSize { + pub size: Val, + cache: f32, +} + +impl FontSize { + pub fn new(size: Val) -> Self { + Self { size, cache: -1.0 } + } +} + +pub fn scale_font_size( + primary_window: Query<&Window, With>, + mut font_size_query: Query<(&mut FontSize, &Node, &mut Text)>, +) { + let Ok(window) = primary_window.get_single() else { + return; + }; + let viewport_size = Vec2::new(window.resolution.width(), window.resolution.height()); + + for (mut font_size, node, mut text) in &mut font_size_query { + let Ok(resolved) = font_size.size.resolve(node.size().x, viewport_size) else { + continue; + }; + if font_size.cache == resolved { + continue; + } + font_size.cache = resolved; + println!("Updating a font size"); + + for section in &mut text.sections { + section.style.font_size = resolved; + } + } +} diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 8c2bada..9ac3b05 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -2,6 +2,10 @@ mod font; use bevy::prelude::*; +use crate::camera::CAMERA_HEIGHT; +use crate::camera::CAMERA_WIDTH; +pub use crate::ui::font::FontSize; +pub use crate::ui::font::BOLD_FONT_HANDLE; pub use crate::ui::font::FONT_HANDLE; pub struct UiPlugin; @@ -13,6 +17,17 @@ impl Plugin for UiPlugin { } } +pub const VH_UNIT: Val = Val::Vh(100.0 / CAMERA_HEIGHT); +pub const VW_UNIT: Val = Val::Vw(100.0 / CAMERA_WIDTH); + +pub fn vw(units: f32) -> Val { + VW_UNIT * units +} + +pub fn vh(units: f32) -> Val { + VH_UNIT * units +} + #[derive(Component, Reflect)] pub struct Selection(pub Entity);