/* * 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 iyes_loopless::prelude::*; use crate::runtime::menu::RTDMenu; use super::MenuState; mod ui; mod allformingcall; mod creategamecall; mod joingamecall; mod mygamescall; mod startgamecall; struct CreateGameEvent; struct AllFormingEvent; struct JoinGameEvent; struct MyGamesEvent; struct StartGameEvent; pub(super) struct PlayMenuPlugin; impl Plugin for PlayMenuPlugin { fn build(&self, app: &mut App) { app.add_loopless_state(PlayMenuState::None) .add_event::() .add_event::() .add_event::() .add_event::() .add_event::() .add_enter_system(MenuState::Play, play_menu_setup) .add_system_set( ConditionSet::new() .run_in_state(PlayMenuState::Visible) .with_system(ui::show) .with_system(creategamecall::start.run_on_event::()) .with_system(creategamecall::handle.run_if(waiting_for_create_game_call)) .with_system(allformingcall::start.run_on_event::()) .with_system(allformingcall::handle.run_if(waiting_for_all_forming_call)) .with_system(joingamecall::start.run_on_event::()) .with_system(joingamecall::handle.run_if(waiting_for_join_game_call)) .with_system(mygamescall::start.run_on_event::()) .with_system(mygamescall::handle.run_if(waiting_for_my_games_call)) .with_system(startgamecall::start.run_on_event::()) .with_system(startgamecall::handle.run_if(waiting_for_start_game_call)) .into(), ); } } /// Play Menu State #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub(super) enum PlayMenuState { None, Visible, } fn play_menu_setup(mut commands: Commands) { commands.insert_resource(NextState(PlayMenuState::Visible)) } fn waiting_for_create_game_call(rtdmenu: Res) -> bool { rtdmenu.waiting_for_create_game_call } fn waiting_for_all_forming_call(rtdmenu: Res) -> bool { rtdmenu.waiting_for_all_forming_call } fn waiting_for_join_game_call(rtdmenu: Res) -> bool { rtdmenu.waiting_for_join_game_call } fn waiting_for_my_games_call(rtdmenu: Res) -> bool { rtdmenu.waiting_for_my_games_call } fn waiting_for_start_game_call(rtdmenu: Res) -> bool { rtdmenu.waiting_for_start_game_call }