From: Ian Jackson Date: Mon, 22 Mar 2021 03:17:52 +0000 (+0000) Subject: Rectangle: Break out region() from hand.rs X-Git-Tag: otter-0.5.0~507 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b83a6701de7d44d5ed9721b50b631e44b57350bc;p=otter.git Rectangle: Break out region() from hand.rs Signed-off-by: Ian Jackson --- diff --git a/src/hand.rs b/src/hand.rs index 80a28b64..5edf7b56 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -170,20 +170,9 @@ impl PieceTrait for Hand { dasharray, desc: new_desc, }); - let centre = gpc.pos; let (region, views) = (||{ dbgc!("claiming region"); - let offset = (self.shape.outline.xy * 0.5)?; - let offset = offset.try_map( - |c| c.floor().to_i32().ok_or(CoordinateOverflow) - )?; - let region = AreaC( - [-1,1].iter().map(|&signum| Ok::<_,IE>({ - (centre + (offset * signum)?)? - })) - .collect::,_>>()? - .into_inner().unwrap() - ); + let region = self.shape.outline.region(gpc.pos)?; let views = OwnerOccultationView { owner: player, owner_view: OccK::Visible, diff --git a/src/shapelib.rs b/src/shapelib.rs index d3e0222c..d29137cf 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -780,6 +780,24 @@ impl CircleDefn { #[derive(Clone,Copy,Debug,Serialize,Deserialize)] pub struct Rectangle { pub xy: PosC } +impl Rectangle { + #[throws(CoordinateOverflow)] + pub fn region(&self, centre: Pos) -> AreaC { + let offset = (self.xy * 0.5)?; + let offset = offset.try_map( + |c| c.floor().to_i32().ok_or(CoordinateOverflow) + )?; + let region = AreaC( + [-1,1].iter().map(|&signum| Ok::<_,CoordinateOverflow>({ + (centre + (offset * signum)?)? + })) + .collect::,_>>()? + .into_inner().unwrap() + ); + region + } +} + #[dyn_upcast] impl OutlineTrait for Rectangle { #[throws(IE)]