126 SetShoppaBorder(bool), |
126 SetShoppaBorder(bool), |
127 } |
127 } |
128 |
128 |
129 #[derive(Debug, PartialEq, Clone)] |
129 #[derive(Debug, PartialEq, Clone)] |
130 pub enum EngineMessage { |
130 pub enum EngineMessage { |
131 Unknown, |
131 Unknown(Vec<u8>), |
132 Empty, |
132 Empty, |
133 Synced(SyncedEngineMessage, u32), |
133 Synced(SyncedEngineMessage, u32), |
134 Unsynced(UnsyncedEngineMessage), |
134 Unsynced(UnsyncedEngineMessage), |
135 Unordered(UnorderedEngineMessage), |
135 Unordered(UnorderedEngineMessage), |
136 Config(ConfigEngineMessage), |
136 Config(ConfigEngineMessage), |
170 Attack(Press) => em![b'A'], |
170 Attack(Press) => em![b'A'], |
171 Attack(Release) => em![b'a'], |
171 Attack(Release) => em![b'a'], |
172 NextTurn => em![b'N'], |
172 NextTurn => em![b'N'], |
173 Switch => em![b'S'], |
173 Switch => em![b'S'], |
174 Timer(t) => vec![b'0' + t], |
174 Timer(t) => vec![b'0' + t], |
175 Slot(s) => vec![b'~' , *s], |
175 Slot(s) => vec![b'~', *s], |
176 SetWeapon(s) => vec![b'~', *s], |
176 SetWeapon(s) => vec![b'~', *s], |
177 Put(x, y) => { |
177 Put(x, y) => { |
178 let mut v = vec![b'p']; |
178 let mut v = vec![b'p']; |
179 v.write_i24::<BigEndian>(*x).unwrap(); |
179 v.write_i24::<BigEndian>(*x).unwrap(); |
180 v.write_i24::<BigEndian>(*y).unwrap(); |
180 v.write_i24::<BigEndian>(*y).unwrap(); |
181 |
181 |
182 v |
182 v |
183 }, |
183 } |
184 CursorMove(x, y) => { |
184 CursorMove(x, y) => { |
185 let mut v = vec![b'P']; |
185 let mut v = vec![b'P']; |
186 v.write_i24::<BigEndian>(*x).unwrap(); |
186 v.write_i24::<BigEndian>(*x).unwrap(); |
187 v.write_i24::<BigEndian>(*y).unwrap(); |
187 v.write_i24::<BigEndian>(*y).unwrap(); |
188 |
188 |
189 v |
189 v |
190 }, |
190 } |
191 HighJump => em![b'J'], |
191 HighJump => em![b'J'], |
192 LongJump => em![b'j'], |
192 LongJump => em![b'j'], |
193 Skip => em![b','], |
193 Skip => em![b','], |
194 TeamControlGained(str) => ems![b'g', str], |
194 TeamControlGained(str) => ems![b'g', str], |
195 TeamControlLost(str) => ems![b'f', str], |
195 TeamControlLost(str) => ems![b'f', str], |
240 pub const MAX_LEN: u16 = 49215; |
240 pub const MAX_LEN: u16 = 49215; |
241 |
241 |
242 fn to_unwrapped(&self) -> Vec<u8> { |
242 fn to_unwrapped(&self) -> Vec<u8> { |
243 use self::EngineMessage::*; |
243 use self::EngineMessage::*; |
244 match self { |
244 match self { |
245 Unknown => unreachable!("you're not supposed to construct such messages"), |
245 Unknown(_) => unreachable!("you're not supposed to construct such messages"), |
246 Empty => unreachable!("you're not supposed to construct such messages"), |
246 Empty => unreachable!("you're not supposed to construct such messages"), |
247 Synced(SyncedEngineMessage::TimeWrap, _) => vec![b'#', 0xff, 0xff], |
247 Synced(SyncedEngineMessage::TimeWrap, _) => vec![b'#', 0xff, 0xff], |
248 Synced(msg, timestamp) => { |
248 Synced(msg, timestamp) => { |
249 let mut v = msg.to_bytes(); |
249 let mut v = msg.to_bytes(); |
250 v.push((*timestamp / 256) as u8); |
250 v.push((*timestamp / 256) as u8); |