M client/src/api/game/mod.rs => client/src/api/game/mod.rs +7 -2
@@ 38,7 38,7 @@ pub enum Command {
ShuffleDiscardToDeck { seed: u32 },
}
-#[derive(Deserialize)]
+#[derive(Deserialize, Clone)]
pub struct Action {
pub id: String,
pub created_at: String,
@@ 49,7 49,7 @@ pub struct Action {
pub command: Command,
}
-#[derive(Deserialize)]
+#[derive(Deserialize, Clone)]
pub struct Game {
pub id: String,
pub created_at: String,
@@ 63,3 63,8 @@ pub struct Game {
pub turn: u8,
pub actions: Option<Vec<Action>>,
}
+
+pub const GAMESTATE_FORMING: u8 = 0;
+pub const GAMESTATE_INPROGRESS: u8 = 1;
+pub const GAMESTATE_FINISHED: u8 = 2;
+pub const GAMESTATE_CANCELLED: u8 = 3;
M client/src/api/user/mod.rs => client/src/api/user/mod.rs +1 -1
@@ 14,7 14,7 @@ pub use login::*;
mod register;
pub use register::*;
-#[derive(Deserialize)]
+#[derive(Deserialize, Clone)]
pub struct User {
pub id: String,
pub created_at: String,
M => +57 -5
@@ 9,10 9,10 @@
use bevy::prelude::*;
use bevy_egui::egui;
use crate::plugins::{
use crate::{plugins::{
GameCreateCallEvent, BrowseState,
GameFormingCallEvent, GameMyGamesCallEvent
};
}, api::game::{GAMESTATE_INPROGRESS, GAMESTATE_FINISHED}};
use super::{MenuData, MenuUIState};
@@ 73,9 73,61 @@ pub fn view(
});
ui.vertical_centered(|ui| {
egui::ScrollArea::vertical().show(ui, |ui| match data.browse_state {
BrowseState::Forming => {}
BrowseState::InProgress => {}
BrowseState::Finished => {}
BrowseState::Forming => {
for game in &data.forming_games {
egui::Frame::none()
.fill(egui::Color32::BLACK)
.rounding(4.)
.outer_margin(4.)
.inner_margin(4.)
.show(ui, |ui| {
ui.horizontal(|ui| {
ui.label(format!(
"Host: {}",
game.host.as_ref().unwrap().username
));
});
});
}
}
BrowseState::InProgress => {
let mut games = data.my_games.clone();
games.retain(|g| g.state == GAMESTATE_INPROGRESS);
for game in &games {
egui::Frame::none()
.fill(egui::Color32::BLACK)
.rounding(4.)
.outer_margin(4.)
.inner_margin(4.)
.show(ui, |ui| {
ui.horizontal(|ui| {
ui.label(format!(
"Host: {}",
game.host.as_ref().unwrap().username
));
});
});
}
}
BrowseState::Finished => {
let mut games = data.my_games.clone();
games.retain(|g| g.state == GAMESTATE_FINISHED);
for game in &games {
egui::Frame::none()
.fill(egui::Color32::BLACK)
.rounding(4.)
.outer_margin(4.)
.inner_margin(4.)
.show(ui, |ui| {
ui.horizontal(|ui| {
ui.label(format!(
"Host: {}",
game.host.as_ref().unwrap().username
));
});
});
}
}
}
);
});