Browse Source

Add visible modifier for piles

main
ThePerkinrex 5 years ago
parent
commit
b0ee2f684b
No known key found for this signature in database GPG Key ID: FD81DE6D75E20917
  1. 4
      server/schema/game-config.json
  2. 4
      server/src/games/config.rs
  3. 5
      server/src/games/run/types.rs
  4. 2
      server/src/server/game.rs
  5. 2
      server/src/server/protos/game.rs

4
server/schema/game-config.json

@ -84,6 +84,10 @@
"face_down": { "face_down": {
"default": false, "default": false,
"type": "boolean" "type": "boolean"
},
"visible": {
"default": true,
"type": "boolean"
} }
}, },
"additionalProperties": true "additionalProperties": true

4
server/src/games/config.rs

@ -36,10 +36,14 @@ pub struct Pile {
pub cards: Vec<String>, pub cards: Vec<String>,
#[serde(default)] #[serde(default)]
pub face_down: bool, pub face_down: bool,
#[serde(default = "default_visible")]
pub visible: bool,
#[serde(flatten)] #[serde(flatten)]
pub other: HashMap<String, serde_json::Value>, pub other: HashMap<String, serde_json::Value>,
} }
fn default_visible() -> bool {true}
impl Config { impl Config {
pub fn load<P: AsRef<std::path::Path> + std::fmt::Debug>(file: P) -> Self { pub fn load<P: AsRef<std::path::Path> + std::fmt::Debug>(file: P) -> Self {
let s: Config = serde_json::from_reader(std::fs::File::open(&file).unwrap()) let s: Config = serde_json::from_reader(std::fs::File::open(&file).unwrap())

5
server/src/games/run/types.rs

@ -172,6 +172,7 @@ impl Debug for Card {
pub struct RunningPile { pub struct RunningPile {
pub cards: Vec<Card>, pub cards: Vec<Card>,
pub face_down: bool, pub face_down: bool,
pub visible: bool,
#[serde(flatten)] #[serde(flatten)]
pub other: HashMap<String, serde_json::Value>, pub other: HashMap<String, serde_json::Value>,
} }
@ -183,6 +184,7 @@ impl RunningPile {
cards: p.cards.into_iter().map(|kind| {let other = available_cards.get(&kind).unwrap().other.clone(); Card {kind, uuid: Uuid::new_v4(), other}}).collect(), cards: p.cards.into_iter().map(|kind| {let other = available_cards.get(&kind).unwrap().other.clone(); Card {kind, uuid: Uuid::new_v4(), other}}).collect(),
other: p.other, other: p.other,
face_down: p.face_down, face_down: p.face_down,
visible: p.visible
} }
} }
} }
@ -195,6 +197,7 @@ impl RunningPile {
rhai::serde::from_dynamic(map.get("cards").ok_or("Pile doesn't have property cards")?)?; rhai::serde::from_dynamic(map.get("cards").ok_or("Pile doesn't have property cards")?)?;
let face_down: bool = rhai::serde::from_dynamic(map.get("face_down").ok_or("Pile doesn't have property face_down")?)?; let face_down: bool = rhai::serde::from_dynamic(map.get("face_down").ok_or("Pile doesn't have property face_down")?)?;
let visible: bool = rhai::serde::from_dynamic(map.get("visible").ok_or("Pile doesn't have property visible")?)?;
let other_fallible: Vec<Result<(String, serde_json::Value), Box<rhai::EvalAltResult>>> = let other_fallible: Vec<Result<(String, serde_json::Value), Box<rhai::EvalAltResult>>> =
map.into_iter() map.into_iter()
@ -210,6 +213,6 @@ impl RunningPile {
other.insert(k, v); other.insert(k, v);
} }
Ok(Self { cards, other, face_down }) Ok(Self { cards, other, face_down, visible })
} }
} }

2
server/src/server/game.rs

@ -54,6 +54,7 @@ pub(super) async fn get_status(data: &mut ServiceData) -> Result<GameStatus> {
}) })
.collect(), .collect(),
face_down: v.face_down, face_down: v.face_down,
visible: v.visible
}, },
) )
}) })
@ -80,6 +81,7 @@ pub(super) async fn get_status(data: &mut ServiceData) -> Result<GameStatus> {
}) })
.collect(), .collect(),
face_down: v.face_down, face_down: v.face_down,
visible: v.visible
}, },
) )
}) })

2
server/src/server/protos/game.rs

@ -91,6 +91,8 @@ pub mod game_status {
pub cards: ::prost::alloc::vec::Vec<Card>, pub cards: ::prost::alloc::vec::Vec<Card>,
#[prost(bool, tag="2")] #[prost(bool, tag="2")]
pub face_down: bool, pub face_down: bool,
#[prost(bool, tag="3")]
pub visible: bool,
} }
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Piles { pub struct Piles {

Loading…
Cancel
Save