1use crate::geom::Face;
4
5
6#[inline]
10pub fn get_face(metadata: u8) -> Option<(Face, Face)> {
11 Some(match metadata & 7 {
12 1 => (Face::NegX, Face::PosY),
13 2 => (Face::PosX, Face::PosY),
14 3 => (Face::NegZ, Face::PosY),
15 4 => (Face::PosZ, Face::PosY),
16 5 => (Face::NegY, Face::PosZ),
17 6 => (Face::NegY, Face::PosX),
18 _ => return None
19 })
20}
21
22#[inline]
26pub fn set_face(metadata: &mut u8, face: Face, dir: Face) {
27 *metadata &= !7;
28 *metadata |= match (face, dir) {
29 (Face::NegY, Face::PosZ) => 5,
30 (Face::NegY, _) => 6,
31 (Face::PosY, _) => 0,
32 (Face::NegZ, _) => 3,
33 (Face::PosZ, _) => 4,
34 (Face::NegX, _) => 1,
35 (Face::PosX, _) => 2,
36 }
37}
38
39#[inline]
41pub fn is_active(metadata: u8) -> bool {
42 metadata & 8 != 0
43}
44
45#[inline]
47pub fn set_active(metadata: &mut u8, active: bool) {
48 *metadata &= !8;
49 *metadata |= (active as u8) << 3;
50}