From d21dfe06ae985e205ee92e33ce1bb7999f2ddb81 Mon Sep 17 00:00:00 2001 From: Muhammad Nauman Raza Date: Tue, 28 Nov 2023 14:18:26 +0000 Subject: [PATCH] feat: add basis of login section to startup view Former-commit-id: 871f14b95f00e607fc41d3f72d20e384fd9952e6 --- Cargo.lock | 16 ++++----- src/main.rs | 101 +++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 81 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c27fb86..36a9dc4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,6 +136,14 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "ambition" +version = "0.1.0" +dependencies = [ + "bevy", + "lazy_static", +] + [[package]] name = "android-activity" version = "0.4.3" @@ -205,14 +213,6 @@ dependencies = [ "libloading 0.7.4", ] -[[package]] -name = "aspiration" -version = "0.1.0" -dependencies = [ - "bevy", - "lazy_static", -] - [[package]] name = "async-broadcast" version = "0.5.1" diff --git a/src/main.rs b/src/main.rs index a634260..b73e9cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,16 @@ use bevy::{ core_pipeline::{ tonemapping::Tonemapping, }, + window::*, prelude::*, + winit::WinitSettings, }; use std::collections::HashMap; use lazy_static::lazy_static; +const VERSION: &str = env!("CARGO_PKG_VERSION"); +const PKGNAME: &str = env!("CARGO_PKG_NAME"); + // Create a map of the Hypernova colorscheme lazy_static!{ static ref HYPERNOVA: HashMap<&'static str, Color> = vec![ @@ -15,7 +20,7 @@ lazy_static!{ ("GRAY", Color::hex("27272b").unwrap()), ("LIGHT_GRAY", Color::hex("454449").unwrap()), ("SUBTEXT", Color::hex("d9d0d7").unwrap()), - ("WHITE", Color::hex("fefefa").unwrap()), + ("WHITE", Color::hex("ece5ea").unwrap()), ("RED", Color::hex("f06969").unwrap()), ("MAGENTA", Color::hex("e887bb").unwrap()), ("PURPLE", Color::hex("a292e8").unwrap()), @@ -26,12 +31,31 @@ lazy_static!{ ].iter().copied().collect(); } +fn titlecase(s: &str) -> String { + let mut c = s.chars(); + match c.next() { + None => String::new(), + Some(f) => f.to_uppercase().collect::() + c.as_str(), + } +} + fn main() { App::new() - .add_plugins(DefaultPlugins) + // Only run the app when there is user input, significantly reducing CPU/GPU usage + .insert_resource(WinitSettings::desktop_app()) + .add_plugins( + DefaultPlugins.set(WindowPlugin { + primary_window: Some(Window { + title: format!("{} {}", titlecase(PKGNAME), VERSION).into(), + mode: WindowMode::Fullscreen, + ..default() + }), + ..default() + }) + ) .add_systems( Startup, - (setup, render_ui) + (setup, setup_ui) ) .run(); } @@ -49,56 +73,77 @@ fn setup(mut commands: Commands) { ); } -fn render_ui( +fn setup_ui( server: Res, mut commands: Commands ) { let bold_font: Handle = server.load("fonts/VictorMono-Bold.otf"); let regular_font: Handle = server.load("fonts/VictorMono-Regular.otf"); - let text_style = TextStyle { + let title_style = TextStyle { font: bold_font.clone(), - font_size: 80.0, - color: Color::WHITE, + font_size: 70., + color: HYPERNOVA.get("WHITE").copied().unwrap(), }; + let login_style = TextStyle { + font: bold_font.clone(), + font_size: 30., + color: HYPERNOVA.get("PURPLE").copied().unwrap(), + }; + commands .spawn(NodeBundle { style: Style { width: Val::Percent(100.), height: Val::Percent(100.0), - justify_content: JustifyContent::SpaceBetween, - ..Default::default() + flex_direction: FlexDirection::Column, + align_items: AlignItems::Center, + ..default() }, background_color: BackgroundColor(HYPERNOVA.get("DARK_GRAY").copied().unwrap()), - ..Default::default() + ..default() }) .with_children(|parent| { + parent + .spawn(TextBundle::from_section("Ambition", title_style.clone()) + .with_text_alignment(TextAlignment::Center) + .with_style(Style { + position_type: PositionType::Absolute, + margin: UiRect { + top: Val::Vh(10.), + ..default() + }, + ..default() + }) + ); parent .spawn(NodeBundle { style: Style { - width: Val::Percent(100.), - height: Val::Percent(100.0), flex_direction: FlexDirection::Column, align_items: AlignItems::Center, - ..Default::default() + width: Val::Percent(50.), + height: Val::Percent(40.), + margin: UiRect { + top: Val::Vh(30.), + ..default() + }, + padding: UiRect { + top: Val::Percent(2.), + ..default() + }, + ..default() }, - background_color: BackgroundColor(HYPERNOVA.get("DARK_GRAY").copied().unwrap()), - ..Default::default() + background_color: BackgroundColor(HYPERNOVA.get("GRAY").copied().unwrap()), + ..default() }) .with_children(|parent| { parent - .spawn(TextBundle::from_section("Ambition", text_style.clone()) - .with_text_alignment(TextAlignment::Center) - .with_style(Style { - position_type: PositionType::Absolute, - margin: UiRect { - top: Val::Percent(10.), - ..default() - }, - ..default() - }) - ); + .spawn(TextBundle::from_section("Login", login_style.clone()) + .with_text_alignment(TextAlignment::Center) + .with_style(Style { + position_type: PositionType::Absolute, + ..default() + })); }); - } - ); + }); }