chiark / gitweb /
Rectangle: Break out region() from hand.rs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Mar 2021 03:17:52 +0000 (03:17 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 23 Mar 2021 22:42:43 +0000 (22:42 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/hand.rs
src/shapelib.rs

index 80a28b64f1a3b3b5cf664d91c789da0d244defb8..5edf7b56e64f29aa4c9367c9b2dd0c44418e7739 100644 (file)
@@ -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::<Result<ArrayVec<_>,_>>()?
-              .into_inner().unwrap()
-          );
+          let region = self.shape.outline.region(gpc.pos)?;
           let views = OwnerOccultationView {
             owner: player,
             owner_view: OccK::Visible,
index d3e0222c333d9530908147da6fd7ab622eb472c8..d29137cf994232dc6d1b33c9eee8ebc042f9d758 100644 (file)
@@ -780,6 +780,24 @@ impl CircleDefn {
 #[derive(Clone,Copy,Debug,Serialize,Deserialize)]
 pub struct Rectangle { pub xy: PosC<f64> }
 
+impl Rectangle {
+  #[throws(CoordinateOverflow)]
+  pub fn region(&self, centre: Pos) -> AreaC<Coord> {
+    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::<Result<ArrayVec<_>,_>>()?
+        .into_inner().unwrap()
+    );
+    region
+  }
+}
+
 #[dyn_upcast]
 impl OutlineTrait for Rectangle {
   #[throws(IE)]