/*
* This file is part of sdbclient
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* 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<EguiContext>,
mut rtdmenu: ResMut<RTDMenu>,
mut creategame_ev_w: EventWriter<CreateGameEvent>,
mut allforming_ev_w: EventWriter<AllFormingEvent>,
) {
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
}
}
}
});
}