chiark / gitweb /
more generation
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 26 Jun 2020 16:58:46 +0000 (17:58 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 26 Jun 2020 16:58:46 +0000 (17:58 +0100)
src/gamestate.rs
src/pieces.rs

index 6d2c328040e081e691be9f61901d469889e3a718..87fd743d92a7506cd085cf28c1caddf424a7c13a 100644 (file)
@@ -17,7 +17,7 @@ pub type VisiblePieceIdSvgIds = &'static [&'static str];
 
 impl Display for VisiblePieceId {
   fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
-    write!(f, "{}-{}", self.0 >> 32, self.0 & 0xffffffff)
+    write!(f, "{}.{}", self.0 >> 32, self.0 & 0xffffffff)
   }
 }
 impl Debug for VisiblePieceId {
@@ -27,14 +27,16 @@ impl Debug for VisiblePieceId {
 }
 
 impl PieceRenderInstructions {
-  pub fn id_piece(&self) -> String { format!("piece{:}", self.id) }
-  pub fn id_select(&self) -> String { format!("select{:}", self.id) }
-  pub fn id_other(&self, w : &str) -> String { format!("d{}-{}", self.id, w) }
+  pub fn id_piece(&self) -> String { format!("piece{}", self.id) }
+  pub fn id_select(&self) -> String { format!("select{}", self.id) }
+  pub fn id_x(&self, w : &str) -> String { format!("def.{}.{}", self.id, w) }
 }
 
 pub trait Piece : Send + Debug {
-  fn svg_other_ids(&self) -> VisiblePieceIdSvgIds;
-  fn svg_defs(&self, pri : &PieceRenderInstructions) -> String;
+  fn svg_piece(&self, pri : &PieceRenderInstructions) -> String;
+  fn svg_select(&self, pri : &PieceRenderInstructions) -> String;
+  fn svg_x_ids(&self) -> VisiblePieceIdSvgIds;
+  fn svg_x_defs(&self, pri : &PieceRenderInstructions) -> String;
 }
 
 #[derive(Debug)]
index 5ba90784b532ec94013b2c0190fcd63ddccf6906..35c5a7b918356980cb8695add726af2cd4955652 100644 (file)
@@ -11,10 +11,30 @@ struct SimpleShape {
   colours : IndexVec<FaceId,Colour>,
 }
 
+const SELECT_SCALE : f64 = 1.1;
+
 impl Piece for SimpleShape {
-  fn svg_other_ids(&self) -> VisiblePieceIdSvgIds { &["base"] }
-  fn svg_defs(&self, pri : &PieceRenderInstructions) -> String {
-    format!(r#"<g id={}>{}</g>"#, pri.id_other("base"), self.shape)
+  fn svg_piece(&self, pri : &PieceRenderInstructions) -> String {
+    format!(r##"
+              <g fill="{}">
+                <use href="#{}"/>
+              </g>
+            "##,
+            self.colours[pri.face],
+            pri.id_x("base"))
+  }
+  fn svg_select(&self, pri : &PieceRenderInstructions) -> String {
+    format!(r##"
+              <g transform="scale({})">
+               <use href="#{}"/>
+              </g>
+            "##,
+            SELECT_SCALE,
+            pri.id_x("base"))
+  }
+  fn svg_x_ids(&self) -> VisiblePieceIdSvgIds { &["base"] }
+  fn svg_x_defs(&self, pri : &PieceRenderInstructions) -> String {
+    format!(r#"<g id={}>{}</g>"#, pri.id_x("base"), self.shape)
   }
 }