1#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Copy, Clone)]
2pub struct RegionPosition {
3 pub x: i32,
4 pub z: i32,
5}
6
7impl RegionPosition {
8 pub fn new(x: i32, z: i32) -> RegionPosition {
9 RegionPosition { x, z }
10 }
11
12 pub fn from_chunk_position(chunk_x: i32, chunk_z: i32) -> RegionPosition {
13 let x = chunk_x >> 5;
14 let z = chunk_z >> 5;
15
16 RegionPosition::new(x, z)
17 }
18}
19
20#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Copy, Clone)]
21pub struct RegionChunkPosition {
22 pub x: u8,
23 pub z: u8,
24}
25
26impl RegionChunkPosition {
27 pub fn new(x: u8, z: u8) -> RegionChunkPosition {
28 debug_assert!(32 > x, "Region chunk x coordinate out of bounds");
29 debug_assert!(32 > z, "Region chunk z coordinate out of bounds");
30
31 RegionChunkPosition { x, z }
32 }
33
34 pub fn from_chunk_position(chunk_x: i32, chunk_z: i32) -> RegionChunkPosition {
35 let x = (chunk_x & 31) as u8;
36 let z = (chunk_z & 31) as u8;
37
38 RegionChunkPosition::new(x, z)
39 }
40
41 pub(crate) fn metadata_index(&self) -> usize {
42 self.x as usize + self.z as usize * 32
43 }
44}