/*
* This file is part of laurelin/client
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use bevy::{
ecs::{reflect::ReflectResource, system::Resource},
reflect::Reflect,
};
mod ui;
use laurelin_shared::types::game::GamePub;
pub use ui::*;
#[derive(Default, Resource, Reflect)]
#[reflect(Resource)]
pub struct PlayScreenData {
pub state: PlayScreenState,
pub browse_state: PlayScreenBrowseState,
pub waiting_for_create_game: bool,
pub waiting_for_all_forming: bool,
pub waiting_for_my_games: bool,
#[reflect(ignore)]
pub cur_game: Option<GamePub>,
#[reflect(ignore)]
pub all_forming: Vec<GamePub>,
#[reflect(ignore)]
pub my_games: Vec<GamePub>,
}
#[derive(Default, PartialEq, Clone, Reflect)]
pub enum PlayScreenState {
#[default]
Main,
CreateGame,
InLobbyHost,
InLobbyGuest,
}
impl PlayScreenState {
pub fn display(&self) -> &str {
match self {
PlayScreenState::Main => "Play",
PlayScreenState::CreateGame => "Create",
PlayScreenState::InLobbyHost => "Lobby (Host)",
PlayScreenState::InLobbyGuest => "Lobby (Guest)",
}
}
}
#[derive(Default, PartialEq, Reflect)]
pub enum PlayScreenBrowseState {
#[default]
Forming,
InProgress,
Finished,
}