/* * This file is part of sdbclient * Copyright (C) 2022 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use bevy::prelude::*; use bevy_inspector_egui::bevy_egui::{egui, EguiContext}; use iyes_loopless::prelude::*; use crate::util::eguipwd; use crate::plugins::menu::MenuState; use super::LoginState; /// Login inputs #[derive(Resource, Debug, Component, PartialEq, Eq, Clone)] pub struct InputsUserLogin { pub email: String, pub password: String, pub error: String, } impl InputsUserLogin { pub fn new() -> Self { Self { email: "".to_string(), password: "".to_string(), error: "".to_string(), } } } pub fn account_login_ui( mut commands: Commands, mut egui_context: ResMut, mut inputs: ResMut, ) { egui::Window::new("Login") .collapsible(false) .show(egui_context.ctx_mut(), |ui| { ui.horizontal(|ui| { ui.label("Email: "); ui.text_edit_singleline(&mut inputs.email); }); ui.horizontal(|ui| { ui.label("Password: "); ui.add(eguipwd::password(&mut inputs.password)); }); // Show an error if there is one if !inputs.error.is_empty() { ui.horizontal(|ui| { ui.label(egui::RichText::new(inputs.error.clone()).color(egui::Color32::RED)); }); } ui.with_layout(egui::Layout::right_to_left(egui::Align::Min), |ui| { if ui.button("Cancel").clicked() { commands.insert_resource(NextState(LoginState::None)); commands.insert_resource(NextState(MenuState::AccountLoggedOut)); } if ui.button("Login").clicked() { commands.insert_resource(NextState(LoginState::LoggingIn)); // Reset error field inputs.error = "".to_string(); } }) }); }