#[derive(Clone,Copy,Debug,Serialize,Deserialize,Hash)]
#[derive(Eq,PartialEq)]
#[serde(transparent)]
-pub struct AreaC<T>(pub [PosC<T>; 2]);
-pub type Area = AreaC<Coord>;
+pub struct RectC<T>(pub [PosC<T>; 2]);
+pub type Rect = RectC<Coord>;
// ---------- CheckedArith ----------
)}
}
-// ---------- Area ----------
+// ---------- Rect ----------
-impl<T> AreaC<T> {
+impl<T> RectC<T> {
pub fn contains(&self, p: PosC<T>) -> bool where T: PartialOrd {
(0..2).all(|i| {
p.0[i] >= self.0[0].0[i] &&
})
}
- pub fn overlaps(&self, other: &AreaC<T>) -> bool where T: PartialOrd {
+ pub fn overlaps(&self, other: &RectC<T>) -> bool where T: PartialOrd {
! (0..2).any(|i| (
other.0[1].0[i] < self .0[0].0[i] ||
self .0[1].0[i] < other.0[0].0[i]
pub fn empty() -> Self where T: Copy + num_traits::Zero + num_traits::One {
let zero = <T as num_traits::Zero>::zero();
let one = <T as num_traits::One>::one();
- AreaC([
+ RectC([
PosC([ one, one ]),
PosC([ zero, zero ]),
])
}
}
-impl<T> AreaC<T> where T: Mean + Debug {
+impl<T> RectC<T> where T: Mean + Debug {
pub fn middle(&self) -> PosC<T> {
Mean::mean(&self.0[0],
&self.0[1])
#[test]
fn empty_area() {
- let empty = Area::empty();
+ let empty = Rect::empty();
for x in -3..3 { for y in -3..3 {
assert!(! empty.contains(PosC([x,y])));
} }
#[derive(Clone,Debug,Serialize,Deserialize)]
pub enum RegionC<T> {
- Rectangle(AreaC<T>),
+ Rectangle(RectC<T>),
}
pub type Region = RegionC<Coord>;
}
pub fn empty() -> Self where T: Copy + num_traits::Zero + num_traits::One {
- RegionC::Rectangle(AreaC::empty())
+ RegionC::Rectangle(RectC::empty())
}
}
});
let (region, views) = (||{
dbgc!("claiming region");
- let area = self.shape.outline.area (gpc.pos)?;
+ let rect = self.shape.outline.rect (gpc.pos)?;
let region = self.shape.outline.region(gpc.pos)?;
- let displace = OccDisplacement::Rect { area };
+ let displace = OccDisplacement::Rect { rect };
let views = OwnerOccultationView {
owner: player,
owner_view: OccK::Visible,
pos: Pos,
},
Rect {
- area: Area,
+ rect: Rect,
},
}
use OccDisplacement as OD;
match self {
OD::Stack{pos} => *pos,
- OD::Rect{area} => (|| Some({
+ OD::Rect{rect} => (|| Some({
let notch: Coord = notch.try_into().ok()?;
- let mut spare = ((area.0[1] - area.0[0]).ok()?
+ let mut spare = ((rect.0[1] - rect.0[0]).ok()?
- ppiece_use_size).ok()?;
for s in &mut spare.0 { *s = max(*s,1) }
let fi = 0;
let mut f_num = notch % f_count;
let g_num = notch / f_count;
if g_num % 2 != 0 { f_num = f_count - 1 - f_num }
- let f_coord = area.0[1].0[fi] - ppiece_use_size.0[fi] / 2 -
+ let f_coord = rect.0[1].0[fi] - ppiece_use_size.0[fi] / 2 -
f_stride * f_num;
- let g_coord = area.0[0].0[gi] + ppiece_use_size.0[gi] / 2 +
+ let g_coord = rect.0[0].0[gi] + ppiece_use_size.0[gi] / 2 +
if g_num < g_count {
g_stride * g_num
} else if g_num < spare.0[gi] {
pos.0[gi] = g_coord;
pos
}))().unwrap_or_else(||{
- area.middle()
+ rect.middle()
})
}
}
.chain(iter::once(&views.defview))
.filter_map(|ok| { use OccKG::*; match ok {
Visible | Scrambled | Invisible => None,
- Displaced((_area, ref z)) => Some(z)
+ Displaced((_region, ref z)) => Some(z)
}})
.max()
} {
pub const CLOCK_REALTIME : ClockId = ClockId::CLOCK_REALTIME ;
pub const CLOCK_MONOTONIC: ClockId = ClockId::CLOCK_MONOTONIC;
-pub use otter_base::geometry::{self,Coord,Pos,PosC,Area,AreaC};
+pub use otter_base::geometry::{self,Coord,Pos,PosC,Rect,RectC};
pub use otter_base::geometry::{CoordinateOverflow,Region};
pub use otter_base::zcoord::{self, ZCoord};
pub use otter_base::misc as base_misc;
impl Rectangle {
#[throws(CoordinateOverflow)]
- pub fn area(&self, centre: Pos) -> AreaC<Coord> {
+ pub fn rect(&self, centre: Pos) -> RectC<Coord> {
let offset = (self.xy * 0.5)?;
let offset = offset.try_map(
|c| c.floor().to_i32().ok_or(CoordinateOverflow)
)?;
- let region = AreaC(
+ let rect = RectC(
[-1,1].iter().map(|&signum| Ok::<_,CoordinateOverflow>({
(centre + (offset * signum)?)?
}))
.collect::<Result<ArrayVec<_>,_>>()?
.into_inner().unwrap()
);
- region
+ rect
}
#[throws(CoordinateOverflow)]
pub fn region(&self, centre: Pos) -> Region {
- Region::Rectangle(self.area(centre)?)
+ Region::Rectangle(self.rect(centre)?)
}
}