#[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)),
}
}
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)?;
#[derive(Clone,Debug,Serialize,Deserialize)]
#[derive(Eq,PartialEq,Hash)]
pub enum OccDisplacement {
+ Stack {
+ pos: Pos,
+ },
Rect {
area: Area,
},
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()?