#[cfg(feature = "bevy_reflect")]
use bevy_reflect::prelude::*;
use core::ops::{Add, AddAssign};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[repr(transparent)]
#[cfg_attr(feature = "bevy_reflect", derive(Reflect))]
#[cfg_attr(
all(feature = "serialize", feature = "bevy_reflect"),
reflect(Serialize, Deserialize)
)]
pub struct RegionId(u16);
bitflags::bitflags! {
impl RegionId: u16 {
const NONE = 0;
const BORDER_REGION = 0x8000;
const MAX = u16::MAX;
}
}
impl Add<u16> for RegionId {
type Output = Self;
fn add(self, other: u16) -> Self::Output {
RegionId::from(self.bits() + other)
}
}
impl AddAssign<u16> for RegionId {
fn add_assign(&mut self, other: u16) {
*self = RegionId::from(self.bits() + other);
}
}
impl Default for RegionId {
fn default() -> Self {
Self::NONE
}
}
impl From<u16> for RegionId {
fn from(value: u16) -> Self {
RegionId::from_bits_retain(value)
}
}