M client/src/api/game/mod.rs => client/src/api/game/mod.rs +3 -1
@@ 9,7 9,7 @@
 use serde::{Deserialize, Serialize};
 use serde_repr::Deserialize_repr;
 
-use crate::game_status::Card;
+use crate::game_status::{Card, PlayerState};
 
 use super::user::User;
 
@@ 40,6 40,8 @@ pub enum Command {
     Draw { amount: usize },
     /// discard card from hand in slot N
     Discard { index: usize },
+    /// change player state to another
+    ChangePlayerState { state: PlayerState },
 }
 
 #[derive(Deserialize, Serialize, Clone)]
 
M client/src/game_status/mod.rs => client/src/game_status/mod.rs +13 -0
@@ 42,7 42,20 @@ pub struct SupplyPile {
     pub amount: usize,
 }
 
+#[derive(Deserialize, Serialize, Clone, Copy)]
+pub enum PlayerState {
+    /// e.g. not their turn
+    Idle,
+    /// action phase, playing cards
+    ActionPhase,
+    /// buy phase, buying cards
+    BuyPhase,
+}
+
 pub struct PlayerStatus {
+    pub state: PlayerState,
+    pub currency: i16,
+    pub vp: i16,
     pub hand: Vec<Card>,
     pub deck: Vec<Card>,
     pub discard: Vec<Card>,
 
M client/src/game_status/parser.rs => client/src/game_status/parser.rs +10 -1
@@ 11,7 11,7 @@ use fastrand::Rng;
 
 use crate::{api::game::{Action, Command, Game}, game_status::SupplyPile};
 
-use super::{GameStatus, PlayerStatus, Card};
+use super::{GameStatus, PlayerState, PlayerStatus, Card};
 
 pub fn parse(game: &Game) -> Result<GameStatus, ()> {
     let mut game_status = GameStatus {
@@ 21,12 21,18 @@ pub fn parse(game: &Game) -> Result<GameStatus, ()> {
     };
 
     game_status.players.insert(game.host_id.clone(), PlayerStatus {
+        state: PlayerState::Idle,
+        currency: 0,
+        vp: 2,
         hand: vec![],
         deck: vec![],
         discard: vec![]
     });
 
     game_status.players.insert(game.guest_id.clone(), PlayerStatus {
+        state: PlayerState::Idle,
+        currency: 0,
+        vp: 2,
         hand: vec![],
         deck: vec![],
         discard: vec![]
@@ 79,6 85,9 @@ pub fn parse(game: &Game) -> Result<GameStatus, ()> {
                 assert!(*index <= target.hand.len());
                 target.discard.push(target.hand.remove(*index));
             }
+            Command::ChangePlayerState { state } => {
+                target.state = *state;
+            }
             _ => todo!(),
         }
     }