maikor_platform/models/
layer_header.rs1use crate::graphics::layer_header::byte3;
2use crate::models::{Byteable, LayerHeader};
3
4impl LayerHeader {
5 pub fn new(x: isize, y: isize, enabled: bool, atlas: usize, order: usize) -> Self {
6 Self {
7 x,
8 y,
9 enabled,
10 atlas,
11 order,
12 }
13 }
14}
15
16impl Byteable for LayerHeader {
17 const SIZE: usize = 3;
18
19 fn from_bytes(bytes: &[u8]) -> LayerHeader {
20 LayerHeader {
21 x: bytes[0] as i8 as isize,
22 y: bytes[1] as i8 as isize,
23 enabled: bytes[2] & byte3::MASK_ENABLED == byte3::MASK_ENABLED,
24 order: ((bytes[2] & byte3::MASK_ORDER) >> byte3::OFFSET_ORDER) as usize,
25 atlas: ((bytes[2] & byte3::MASK_ATLAS) >> byte3::OFFSET_ATLAS) as usize,
26 }
27 }
28
29 fn to_bytes(&self) -> Vec<u8> {
30 let mut byte3 = 0;
31 if self.enabled {
32 byte3 |= byte3::MASK_ENABLED;
33 }
34 byte3 |= (self.order as u8) << byte3::OFFSET_ORDER;
35 byte3 |= (self.atlas as u8) << byte3::OFFSET_ATLAS;
36 vec![self.x as i8 as u8, self.y as i8 as u8, byte3]
37 }
38}
39
40#[cfg(test)]
41mod test {
42 use crate::graphics::layer_header::byte3;
43 use crate::models::{Byteable, LayerHeader};
44
45 #[test]
46 fn write_test() {
47 let header = LayerHeader::new(0, 0, false, 0, 0);
48 assert_eq!(header.to_bytes(), [0, 0, 0]);
49 let header = LayerHeader::new(125, 12, true, 1, 2);
50 let bytes = header.to_bytes();
51 assert_eq!(bytes, [125, 12, 19]);
52 assert_eq!(bytes[2] & byte3::MASK_ENABLED, byte3::MASK_ENABLED);
53 assert_eq!((bytes[2] & byte3::MASK_ATLAS) >> byte3::OFFSET_ATLAS, 1);
54 assert_eq!((bytes[2] & byte3::MASK_ORDER) >> byte3::OFFSET_ORDER, 2);
55 let header = LayerHeader::new(-125, -77, false, 2, 3);
56 let bytes = header.to_bytes();
57 assert_eq!(bytes, [131, 179, 28]);
58 assert_eq!(bytes[2] & byte3::MASK_ENABLED, 0);
59 assert_eq!((bytes[2] & byte3::MASK_ATLAS) >> byte3::OFFSET_ATLAS, 2);
60 assert_eq!((bytes[2] & byte3::MASK_ORDER) >> byte3::OFFSET_ORDER, 3);
61 }
62
63 #[test]
64 fn read_test() {
65 let tile = LayerHeader::from_bytes(&[0, 0, 0]);
66 assert_eq!(tile, LayerHeader::default());
67 let tile = LayerHeader::from_bytes(&[127, 127, 255]);
68 assert_eq!(tile, LayerHeader::new(127, 127, true, 3, 3));
69 let tile = LayerHeader::from_bytes(&[255, 255, 0]);
70 assert_eq!(tile, LayerHeader::new(-1, -1, false, 0, 0));
71 let tile = LayerHeader::from_bytes(&[12, 204, byte3::MASK_ENABLED]);
72 assert_eq!(tile, LayerHeader::new(12, -52, true, 0, 0));
73 }
74}