/*
* 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 std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::api::game::{Action, Command};
mod parser;
#[derive(Deserialize, Serialize, Clone)]
pub struct CardAction {
pub target: String,
pub command: Command,
pub seed: u64,
}
#[derive(Deserialize, Serialize, Clone)]
pub struct Card {
pub name: String,
pub cost: u32,
/// if set, use this?
//vp_cost: Option<u32>,
pub actions: Vec<CardAction>,
}
/// a supply pile holds an amount of some card
pub struct SupplyPile {
/// the card type that the supply pile holds
pub card: Card,
/// the amount of cards currently in the pile
pub amount: usize,
}
pub struct PlayerStatus {
pub hand: Vec<Card>,
pub deck: Vec<Card>,
pub discard: Vec<Card>,
}
/// constructed from a vector of [`Action`]s
pub struct GameStatus {
pub supply_piles: Vec<SupplyPile>,
/// player ids mapped to statuses
pub players: HashMap<String, PlayerStatus>,
}
impl GameStatus {
pub fn new(actions: &Vec<Action>) -> Self {
match parser::parse(actions) {
Ok(res) => res,
Err(_) => panic!("parsing actions failed"),
}
}
}