M client/src/game_status/mod.rs => client/src/game_status/mod.rs +3 -3
@@ 10,7 10,7 @@ use std::collections::HashMap;
use serde::{Deserialize, Serialize};
-use crate::api::game::{Action, Command};
+use crate::api::game::{Action, Command, Game};
mod parser;
@@ 55,8 55,8 @@ pub struct GameStatus {
}
impl GameStatus {
- pub fn new(actions: &Vec<Action>) -> Self {
- match parser::parse(actions) {
+ pub fn new(game: &Game) -> Self {
+ match parser::parse(game) {
Ok(res) => res,
Err(_) => panic!("parsing actions failed"),
}
M client/src/game_status/parser.rs => client/src/game_status/parser.rs +16 -4
@@ 9,17 9,29 @@
use std::collections::HashMap;
use fastrand::Rng;
-use crate::{api::game::{Action, Command}, game_status::SupplyPile};
+use crate::{api::game::{Action, Command, Game}, game_status::SupplyPile};
use super::{GameStatus, PlayerStatus, Card};
-pub fn parse(actions_init: &Vec<Action>) -> Result<GameStatus, ()> {
+pub fn parse(game: &Game) -> Result<GameStatus, ()> {
let mut game_status = GameStatus {
- actions: actions_init.to_vec(),
+ actions: game.actions.as_ref().unwrap().to_vec(),
supply_piles: vec![],
- players: HashMap::new(),
+ players: HashMap::new()
};
+ game_status.players.insert(game.host_id.clone(), PlayerStatus {
+ hand: vec![],
+ deck: vec![],
+ discard: vec![]
+ });
+
+ game_status.players.insert(game.guest_id.clone(), PlayerStatus {
+ hand: vec![],
+ deck: vec![],
+ discard: vec![]
+ });
+
for action in &game_status.actions {
// the one who invoked the action
let invoker = game_status.players.get_mut(&action.invoker)
M client/src/plugins/async_tasks/parse_game_status.rs => client/src/plugins/async_tasks/parse_game_status.rs +1 -1
@@ 29,7 29,7 @@ pub fn start_call(
let thread_pool = AsyncComputeTaskPool::get();
let ev = ev.clone();
let task = thread_pool.spawn(async move {
- let res = GameStatus::new(&ev.game.actions.unwrap());
+ let res = GameStatus::new(&ev.game);
res
});