chiark / gitweb /
hidden: Do not report moves to players seeing a Displaced occultation
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 19:51:10 +0000 (19:51 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 19:51:10 +0000 (19:51 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/pcrender.rs
src/prelude.rs

index 02e96ed08529eabd9dfbcdf244e134dd4c60d043..08928c56ea097531462647f5ac31b97e2ab711e6 100644 (file)
@@ -41,6 +41,19 @@ impl PieceRenderInstructions {
                              op: PieceUpdateOp<(),()>
   ) -> Option<PieceUpdateOp<PreparedPieceState, ZLevel>>
   {
+    use PieceUpdateOp::*;
+    use PriOcculted::*;
+    if matches_doesnot!(
+      op,
+      = Move(_) | SetZLevel(_),
+      ! Delete() | Insert(_) | Modify(_) | ModifyQuiet(_),
+    ) {
+      match self.occulted {
+        Visible | Occulted => (),
+        Displaced(..) => return None,
+      }
+    }
+
     let op = op.try_map(
       |()|{
         let ns = self.prep_piecestate(ioccults, gpc, ipc)?;
index bc6c8d5a483956993f0a7af7c4351a7f52866d0f..71722f7daf9936cc06c5042a32df07262fbd11fb 100644 (file)
@@ -103,6 +103,7 @@ pub use crate::dbgc;
 pub use crate::{deref_to_field, deref_to_field_mut};
 pub use crate::ensure_eq;
 pub use crate::from_instance_lock_error;
+pub use crate::matches_doesnot;
 pub use crate::trace_dbg;
 
 pub use crate::accounts::loaded_acl::{self, EffectiveACL, LoadedAcl, PermSet};