/*
* 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::Resource;
use crate::api::game::types::Game;
/// Runtime data for use in the menu
#[derive(Resource)]
pub(crate) struct RTDMenu {
pub play_menu_ui_state: PlayMenuUIState,
pub browse_tab: BrowseMenuTab,
pub waiting_for_create_game_call: bool,
/// Current game
pub cur_game: Option<Game>,
/// List of all forming games
pub all_forming_games: Vec<Game>,
pub waiting_for_all_forming_call: bool,
pub waiting_for_join_game_call: bool,
/// Stores games where the player is involved
pub my_games: Vec<Game>,
pub waiting_for_my_games: bool,
}
impl Default for RTDMenu {
fn default() -> Self {
Self {
play_menu_ui_state: PlayMenuUIState::Main,
browse_tab: BrowseMenuTab::Forming,
waiting_for_create_game_call: false,
cur_game: None,
all_forming_games: vec![],
waiting_for_all_forming_call: false,
waiting_for_join_game_call: false,
my_games: vec![],
waiting_for_my_games: false,
}
}
}
pub(crate) enum PlayMenuUIState {
Main,
CreateGame,
InLobbyHost,
InLobbyGuest,
}
impl PlayMenuUIState {
pub fn display(&self) -> &str {
match self {
PlayMenuUIState::Main => "Play",
PlayMenuUIState::CreateGame => "Create",
PlayMenuUIState::InLobbyHost => "Lobby (Host)",
PlayMenuUIState::InLobbyGuest => "Lobby (Guest)",
}
}
}
#[derive(PartialEq)]
pub(crate) enum BrowseMenuTab {
Forming,
InProgress,
Finished,
}