chiark / gitweb /
hidden: Provide fully_visible_to
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 2 Apr 2021 22:35:29 +0000 (23:35 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 3 Apr 2021 02:42:26 +0000 (03:42 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/hidden.rs

index d2b839e8d97d7d66f67c031786f43e408d072b40..cf709cd706cb6fe08456ec968da0cddef3add2c6 100644 (file)
@@ -402,6 +402,22 @@ impl GPiece {
     }
   }
 
+  pub fn fully_visible_to(&self, goccults: &GameOccults, player: PlayerId)
+                          -> Option<ShowUnocculted>
+  {
+    const HIDE: Option<ShowUnocculted> = None;
+    const SHOW: Option<ShowUnocculted> = Some(ShowUnocculted(()));
+    if_let!{ Some(passive) = &self.occult.passive; else return SHOW };
+    want_let!{ Some(occ) = goccults.occults.get(passive.occid);
+               else ?passive.occid; return HIDE };
+    return match occ.views.get_kind(player) {
+      OccK::Visible => SHOW,
+      OccK::Scrambled |
+      OccK::Displaced(_) |
+      OccK::Invisible => HIDE,
+    }
+  }
+
   pub fn involved_in_occultation(&self) -> bool {
     self.occult.passive.is_some() ||
     self.occult.active.is_some()