let GameSpec {
table_size,
pieces,
+ table_colour,
} = read_spec(&ma, &args.game_file)?;
let mut insns = vec![];
if let Some(table_size) = table_size {
insns.push(MGI::SetTableSize(table_size));
}
+ if let Some(table_colour) = table_colour {
+ insns.push(MGI::SetTableColour(table_colour));
+ }
for pspec in pieces.into_iter() {
insns.push(MGI::AddPieces(pspec));
Fine, ig)
}
+ Insn::SetTableColour(colour) => {
+ let ig = cs.check_acl(ag, ig, PCH::Instance, &[TP::ChangePieces])?.0;
+ let colour : Colour = (&colour).try_into()?;
+ ig.gs.table_colour = colour.clone();
+ (U{ pcs: vec![],
+ log: vec![ LogEntry {
+ html: Html(format!("{} recoloured the tabletop to {}",
+ &who.0, &colour.0)),
+ }],
+ raw: Some(vec![ PreparedUpdateEntry::SetTableColour(colour) ]) },
+ Fine, ig)
+ }
+
Insn::JoinGame {
details: MgmtPlayerDetails { nick }
} => {
Noop,
Info,
SetTableSize(Pos),
+ SetTableColour(ColourSpec),
ListPieces,
AddPieces(PiecesSpec),
#[derive(Serialize,Deserialize)]
#[derive(Debug,Default)]
#[repr(transparent)]
+#[serde(transparent)]
pub struct ColourSpec(String);
#[derive(Error,Clone,Serialize,Deserialize,Debug)]
pub struct GameSpec {
pub table_size : Option<Pos>,
pub pieces : Vec<PiecesSpec>,
+ pub table_colour: Option<ColourSpec>,
}
#[derive(Debug,Serialize,Deserialize)]
op : PieceUpdateOp<PreparedPieceState,ZLevel>,
},
SetTableSize(Pos),
+ SetTableColour(Colour),
AddPlayer { player: PlayerId, data: DataLoadPlayer },
RemovePlayer { player: PlayerId },
Log (Arc<CommittedLogEntry>),
ns: &'u PreparedPieceState,
},
SetTableSize(Pos),
+ SetTableColour(&'u Colour),
AddPlayer { player: PlayerId, data: &'u DataLoadPlayer },
RemovePlayer { player: PlayerId },
#[serde(serialize_with="serialize_logentry")]
AddPlayer { player:_, data: DataLoadPlayer { dasharray } } => {
dasharray.as_bytes().len() + 100
},
+ SetTableColour(colour) => {
+ colour.0.as_bytes().len() + 50
+ },
SetTableSize(_) |
RemovePlayer { player:_ } |
Error(_,_) => {
&PUE::SetTableSize(size) => {
TUE::SetTableSize(size)
},
+ PUE::SetTableColour(colour) => {
+ TUE::SetTableColour(colour)
+ },
&PUE::AddPlayer { player, ref data } => {
TUE::AddPlayer { player, data }
},