chiark / gitweb /
deck: When Enabled, stack neatly
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 24 Mar 2021 23:40:07 +0000 (23:40 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 24 Mar 2021 23:40:07 +0000 (23:40 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/deck.rs
src/hidden.rs

index 0a57b7ab108d43089fb490ebee2c6288a37b7b79..7f1fc945179ed4e270703c7c567c8ce8dd6525fa 100644 (file)
@@ -69,9 +69,10 @@ impl Deck {
   #[throws(IE)]
   fn state(&self, gpc: &GPiece, goccults: &GameOccults) -> State {
     match gpc.occult.active_views(&goccults)? {
-      None                                                   => Disabled,
-      Some(OccultationViews { defview: OccK::Visible,..   }) => Counting,
-      Some(OccultationViews { defview: OccK::Scrambled,.. }) => Enabled,
+      None                                                       => Disabled,
+      Some(OccultationViews { defview: OccK::Visible,..       }) => Counting,
+      Some(OccultationViews { defview: OccK::Scrambled /*old*/,.. }) |
+      Some(OccultationViews { defview: OccK::Displaced(..),.. }) => Enabled, 
       x => throw!(internal_error_bydebug(&x)),
     }
   }
@@ -187,7 +188,11 @@ impl PieceTrait for Deck {
     let new_view = match new_state {
       Disabled => None,
       Counting => Some(OccKG::Visible),
-      Enabled  => Some(OccKG::Scrambled),
+      Enabled  => {
+        let displace = OccDisplacement::Stack { pos: gpc.pos };
+        let displace = (displace, gpc.zlevel.z.clone());
+                  Some(OccKG::Displaced(displace))
+      },
     };
     let region_views = new_view.map(|new_view| {
       let region = self.shape.outline.region(gpc.pos)?;
index 7e4bab720660b2c92d7868024d897c83add3347a..77ba1f8de63b7f0928b6504e84cc1926d85369b5 100644 (file)
@@ -74,6 +74,9 @@ pub type OccultationKind = OccultationKindGeneral<(OccDisplacement,ZCoord)>;
 #[derive(Clone,Debug,Serialize,Deserialize)]
 #[derive(Eq,PartialEq,Hash)]
 pub enum OccDisplacement {
+  Stack {
+    pos: Pos,
+  },
   Rect {
     area: Area,
   },
@@ -268,6 +271,7 @@ impl OccDisplacement {
   fn place(&self, ppiece_use_size: Pos, notch: NotchNumber) -> Pos {
     use OccDisplacement as OD;
     match self {
+      OD::Stack{pos} => *pos,
       OD::Rect{area} => (|| Some({
         let notch: Coord = notch.try_into().ok()?;
         let mut spare = ((area.0[1] - area.0[0]).ok()?