chiark / gitweb /
Move itemname into PieceBaseTrait
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Apr 2022 19:45:42 +0000 (20:45 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Apr 2022 19:45:42 +0000 (20:45 +0100)
We want this becasue dice want to use inert pieces as images, and use
their images' item names in their own item names.

This involves providing an itemname for ItemInertForOcculted.
Happily the SvgBaseName will do nicely.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/clock.rs
src/deck.rs
src/gamestate.rs
src/hand.rs
src/pieces.rs
src/shapelib.rs

index 5547309f4298ce955a399ab27f61f10b9c768b4a..9bc52e7ff2133907c9256625cf4d8c1b2a9d50ca 100644 (file)
@@ -434,6 +434,8 @@ impl OutlineTrait for Clock {
 
 impl PieceBaseTrait for Clock {
   fn nfaces(&self) -> RawFaceId { 1 }
+
+  fn itemname(&self) -> &str { "chess-clock" }
 }
 
 #[typetag::serde(name="ChessClock")]
@@ -747,6 +749,4 @@ impl PieceTrait for Clock {
     let state = gpc.xdata_mut(|| State::new(&self.spec))?;
     state.do_start_or_stop(piece, None, None, held, &self.spec, ig)?;
   }
-
-  fn itemname(&self) -> &str { "chess-clock" }
 }
index f03f1c6382b77f6079e083f1900ded6554b602d2..f653a11c62c90d1bcef786c0ad4bdab9672781b3 100644 (file)
@@ -98,6 +98,12 @@ impl Deck {
 
 impl PieceBaseTrait for Deck {
   fn nfaces(&self) -> RawFaceId { 1 }
+
+  delegate!{
+    to self.shape {
+      fn itemname(&self) -> &str;
+    }
+  }
 }
 
 #[typetag::serde]
@@ -129,12 +135,6 @@ impl PieceTrait for Deck {
     }.into()
   }
 
-  delegate!{
-    to self.shape {
-      fn itemname(&self) -> &str;
-    }
-  }
-
   #[throws(InternalError)]
   fn add_ui_operations(&self, _: ShowUnocculted, upd: &mut Vec<UoDescription>,
                        gs: &GameState, gpc: &GPiece) {
index 4d060587663d9542dafb3f1dab090b3ed84dc28b..74c5670bf8ed3fc0843f0d55f24c1c94b1edb422 100644 (file)
@@ -176,6 +176,8 @@ pub struct UoDescription {
 pub trait PieceBaseTrait: OutlineTrait + Send + Debug + 'static {
   /// By convention, occult face is nfaces-1
   fn nfaces(&self) -> RawFaceId;
+
+  fn itemname(&self) -> &str;
 }
 
 #[typetag::serde] // usual variable: p
@@ -220,7 +222,6 @@ pub trait PieceTrait: PieceBaseTrait + Send + Debug + 'static {
     ExecuteGameChangeUpdates{ pcs: vec![], log: vec![], raw: None }
   }
 
-  fn itemname(&self) -> &str;
   fn sortkey(&self) -> Option<&str> { None }
 
   fn occultation_notify_hook(&self, _piece: PieceId) -> UnpreparedUpdates {
index 78256507939a740c2872920f29fdc3aac219823e..6430c2a76277f8a87cc874c601a31381babbfb59 100644 (file)
@@ -148,6 +148,12 @@ impl Behaviour {
 
 impl PieceBaseTrait for Hand {
   fn nfaces(&self) -> RawFaceId { 1 }
+
+  delegate!{
+    to self.shape {
+      fn itemname(&self) -> &str;
+    }
+  }
 }
 
 #[typetag::serde]
@@ -195,12 +201,6 @@ impl PieceTrait for Hand {
     self.behaviour.describe_html_inner(xdata)
   }
 
-  delegate!{
-    to self.shape {
-      fn itemname(&self) -> &str;
-    }
-  }
-
   #[throws(InternalError)]
   fn add_ui_operations(&self, _: ShowUnocculted, upd: &mut Vec<UoDescription>,
                        _gs: &GameState, gpc: &GPiece) {
index e96072bfc1f86e5ff0cc7ad7164754e75ac3dd01..ac3e093ef8a3bce916be68135e94166b05948f7c 100644 (file)
@@ -128,6 +128,8 @@ impl<Desc, Outl:'static> OutlineTrait for GenericSimpleShape<Desc, Outl>
 
 impl PieceBaseTrait for SimpleShape {
   fn nfaces(&self) -> RawFaceId { self.count_faces() }
+
+  fn itemname(&self) -> &str { self.itemname() }
 }
 
 #[typetag::serde]
@@ -147,8 +149,6 @@ impl PieceTrait for SimpleShape {
     };
     r
   }
-
-  fn itemname(&self) -> &str { self.itemname() }
 }
 
 #[typetag::serde]
index 4f06ef7405963d175fbd0b4425f4e1504c57081e..39e9baad3dfa131fb8a22f6286b685b7ff305d3b 100644 (file)
@@ -178,6 +178,7 @@ pub struct Item {
 
 #[derive(Debug,Serialize,Deserialize)]
 struct ItemInertForOcculted {
+  itemname: Arc<GoodItemName>,
   desc: Html,
   svgd: Arc<Html>,
   xform: FaceTransform,
@@ -225,6 +226,7 @@ impl OutlineTrait for ItemInertForOcculted { delegate! { to self.outline {
 }}}
 impl PieceBaseTrait for ItemInertForOcculted {
   fn nfaces(&self) -> RawFaceId { 1 }
+  fn itemname(&self) -> &str { &self.itemname.as_str() }
 }
 #[typetag::serde(name="Lib")]
 impl InertPieceTrait for ItemInertForOcculted {
@@ -371,6 +373,8 @@ impl PieceBaseTrait for Item {
      + self.back.iter().count())
       .try_into().unwrap()
   }
+
+  fn itemname(&self) -> &str { &self.itemname }
 }
 
 #[typetag::serde(name="Lib")]
@@ -385,7 +389,6 @@ impl PieceTrait for Item {
     self.describe_face(gpc.face)?
   }
 
-  fn itemname(&self) -> &str { &self.itemname }
   fn sortkey(&self) -> Option<&str> { self.sort.as_ref().map(AsRef::as_ref) }
 }
 
@@ -591,6 +594,7 @@ impl Contents {
         }).clone()?;
         let it = Arc::new(ItemInertForOcculted {
           svgd,
+          itemname: occ_name.clone().into_inner(),
           xform: occ.xform.clone(),
           desc: occ.desc.clone(),
           outline: occ.outline.clone(),