chiark / gitweb /
piece aliases: Define the new aliases, according to the game spec
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 18:46:41 +0000 (18:46 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 19:21:49 +0000 (19:21 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs
src/spec.rs

index 0d36043cbac99c2bfc91b3579512cfb9b841d630..304456d44af4ae9ee5caee1e0eed09057a938e4a 100644 (file)
@@ -667,6 +667,7 @@ mod reset_game {
       table_size,
       pieces,
       table_colour,
+      pcaliases,
     } = read_spec(&ma, &args.game_file)?;
 
     let mut insns = vec![];
@@ -695,6 +696,10 @@ mod reset_game {
       insns.push(MgmtGameInstruction::DeletePieceAlias(p));
     }
 
+    for (alias, target) in pcaliases.into_iter() {
+      insns.push(MGI::DefinePieceAlias{ alias, target });
+    }
+
     if let Some(table_size) = table_size {
       insns.push(MGI::SetTableSize(table_size));
     }
index 41a1b528d919e9b62eff4d1d44d8e8af086e1227..7da64d575a258440f5c80baa381baf187ca668a7 100644 (file)
@@ -163,6 +163,7 @@ pub struct GameSpec {
   pub table_size: Option<Pos>,
   pub pieces: Vec<PiecesSpec>,
   pub table_colour: Option<ColourSpec>,
+  #[serde(default)] pub pcaliases: HashMap<String, Box<dyn PieceSpec>>,
 }
 
 #[derive(Debug, Serialize, Deserialize)]