airmash_protocol/v5/
types.rs1use crate::types::*;
2use crate::v5::*;
3
4impl SerializeV5 for ServerKeyState {
5 fn serialize(&self, ser: &mut AirmashSerializerV5) -> Result {
6 let val = (self.up as u8)
7 | (self.down as u8) << 1
8 | (self.left as u8) << 2
9 | (self.right as u8) << 3
10 | (self.boost as u8) << 4
11 | (self.strafe as u8) << 5
12 | (self.stealth as u8) << 6
13 | (self.flagspeed as u8) << 7;
14 val.serialize(ser)
15 }
16}
17
18impl<'de> DeserializeV5<'de> for ServerKeyState {
19 fn deserialize(de: &mut AirmashDeserializerV5<'de>) -> Result<Self> {
20 let val = de.deserialize_u8()?;
21
22 Ok(ServerKeyState {
23 up: (val & 0b00000001) != 0,
24 down: (val & 0b00000010) != 0,
25 left: (val & 0b00000100) != 0,
26 right: (val & 0b00001000) != 0,
27 boost: (val & 0b00010000) != 0,
28 strafe: (val & 0b00100000) != 0,
29 stealth: (val & 0b01000000) != 0,
30 flagspeed: (val & 0b10000000) != 0,
31 })
32 }
33}
34
35impl SerializeV5 for Upgrades {
36 fn serialize(&self, ser: &mut AirmashSerializerV5) -> Result {
37 let val: u8 =
38 (self.speed & 7) | ((self.shield as u8 & 1) << 3) | ((self.inferno as u8 & 1) << 4);
39 val.serialize(ser)
40 }
41}
42
43impl<'de> DeserializeV5<'de> for Upgrades {
44 fn deserialize(de: &mut AirmashDeserializerV5<'de>) -> Result<Self> {
45 let val = u8::deserialize(de)?;
46
47 Ok(Upgrades {
48 speed: val & 7,
49 shield: (val & (1 << 3)) != 0,
50 inferno: (val & (1 << 4)) != 0,
51 })
52 }
53}