/* * 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::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, /// List of all forming games pub all_forming_games: Vec, 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, pub waiting_for_my_games_call: bool, pub waiting_for_start_game_call: 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_call: false, waiting_for_start_game_call: 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, }