/* * This file is part of sdbclient * Copyright (C) 2023 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::{ plugins::menu::MenuState, runtime::menu::{PlayMenuUIState, RTDMenu}, }; use super::{AllFormingEvent, CreateGameEvent, PlayMenuState}; pub(super) fn show( mut commands: Commands, mut egui_context: ResMut, mut rtdmenu: ResMut, mut creategame_ev_w: EventWriter, mut allforming_ev_w: EventWriter, ) { egui::Window::new(egui::RichText::new(rtdmenu.play_menu_ui_state.display()).size(32.)) .resizable(false) .collapsible(false) .anchor(egui::Align2::CENTER_CENTER, egui::Vec2::ZERO) .show(egui_context.ctx_mut(), |ui| { // Override egui style for this scope. let mut egui_style = (*ui.style_mut()).clone(); egui_style.text_styles = [ ( egui::TextStyle::Heading, egui::FontId::new(30.0, egui::FontFamily::Proportional), ), ( egui::TextStyle::Body, egui::FontId::new(18.0, egui::FontFamily::Proportional), ), ( egui::TextStyle::Monospace, egui::FontId::new(14.0, egui::FontFamily::Proportional), ), ( egui::TextStyle::Button, egui::FontId::new(24.0, egui::FontFamily::Proportional), ), ( egui::TextStyle::Small, egui::FontId::new(10.0, egui::FontFamily::Proportional), ), ] .into(); ui.set_style(egui_style); match rtdmenu.play_menu_ui_state { PlayMenuUIState::Main => { egui::SidePanel::left("play_side_panel").show_inside(ui, |ui| { ui.vertical_centered(|ui| { if ui.button("Create").clicked() { rtdmenu.play_menu_ui_state = PlayMenuUIState::CreateGame } if ui.button("Refresh Browse").clicked() { allforming_ev_w.send(AllFormingEvent); } if ui.button("Back").clicked() { commands.insert_resource(NextState(PlayMenuState::None)); commands.insert_resource(NextState(MenuState::Main)); } }); }); match rtdmenu.waiting_for_all_forming_call { true => { ui.horizontal(|ui| { ui.spinner(); ui.label("loading..."); }); } false => { ui.vertical_centered(|ui| { egui::ScrollArea::vertical() .max_height(200.) .show(ui, |ui| match rtdmenu.all_forming_games.is_empty() { true => { ui.label("No games found."); } false => { for game in &rtdmenu.all_forming_games { egui::Frame::none().show(ui, |ui| { ui.horizontal(|ui| { ui.label(format!("Host: {}", game.p1)); }); }); } } }); }); } } } PlayMenuUIState::CreateGame => { ui.vertical_centered(|ui| { ui.add_enabled_ui(!rtdmenu.waiting_for_create_game_call, |ui| { if ui.button("Confirm").clicked() { creategame_ev_w.send(CreateGameEvent); } if ui.button("Cancel").clicked() { rtdmenu.play_menu_ui_state = PlayMenuUIState::Main } }); }); } PlayMenuUIState::InLobbyHost => { if ui.button("Back").clicked() { rtdmenu.play_menu_ui_state = PlayMenuUIState::Main } } PlayMenuUIState::InLobbyGuest => { if ui.button("Back").clicked() { rtdmenu.play_menu_ui_state = PlayMenuUIState::Main } } } }); }