#[inline]
pub fn is_source(metadata: u8) -> bool {
metadata == 0
}
#[inline]
pub fn set_source(metadata: &mut u8) {
*metadata = 0;
}
#[inline]
pub fn get_distance(metadata: u8) -> u8 {
metadata & 7
}
#[inline]
pub fn set_distance(metadata: &mut u8, distance: u8) {
debug_assert!(distance <= 7);
*metadata &= !7;
*metadata |= distance;
}
#[inline]
pub fn is_falling(metadata: u8) -> bool {
metadata & 8 != 0
}
#[inline]
pub fn set_falling(metadata: &mut u8, falling: bool) {
*metadata &= !8;
*metadata |= (falling as u8) << 3;
}
#[inline]
pub fn get_actual_distance(metadata: u8) -> u8 {
if is_falling(metadata) {
0
} else {
get_distance(metadata)
}
}
#[inline]
pub fn get_actual_height(metadata: u8) -> f32 {
1.0 - (get_actual_distance(metadata) + 1) as f32 / 9.0
}