1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 10:34:11 +02:00
This commit is contained in:
Robin Appelman 2019-03-02 22:33:22 +01:00
commit f2650dc32f
19 changed files with 3614 additions and 2210 deletions

View file

@ -3,9 +3,12 @@ use std::iter::FromIterator;
use bitstream_reader::{BitRead, BitReadSized, LittleEndian};
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
use crate::demo::gameevent_gen::GameEventType;
use crate::demo::gamevent::{GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType, RawGameEvent};
use crate::demo::gamevent::{
GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType,
RawGameEvent,
};
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
Ok(match definition.kind {
@ -16,13 +19,13 @@ fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<
GameEventValueType::Byte => GameEventValue::Byte(stream.read()?),
GameEventValueType::Boolean => GameEventValue::Boolean(stream.read()?),
GameEventValueType::Local => GameEventValue::Local,
GameEventValueType::None => unreachable!()
GameEventValueType::None => unreachable!(),
})
}
#[derive(Debug)]
pub struct GameEventMessage {
pub event: GameEvent
pub event: GameEvent,
}
impl Parse for GameEventMessage {
@ -37,17 +40,12 @@ impl Parse for GameEventMessage {
values.push(read_event_value(&mut data, &entry)?);
}
RawGameEvent {
event_type,
values,
}
RawGameEvent { event_type, values }
}
None => unreachable!()
None => unreachable!(),
};
let event = GameEvent::from_raw_event(raw_event)?;
Ok(GameEventMessage {
event
})
Ok(GameEventMessage { event })
}
}
@ -86,12 +84,8 @@ impl BitRead<LittleEndian> for GameEventListMessage {
let length: u32 = stream.read_sized(20)?;
let mut data = stream.read_bits(length as usize)?;
let event_list_vec: Vec<GameEventDefinition> = data.read_sized(count as usize)?;
let event_list = HashMap::from_iter(
event_list_vec.into_iter().map(|def| (def.id, def))
);
let event_list = HashMap::from_iter(event_list_vec.into_iter().map(|def| (def.id, def)));
Ok(GameEventListMessage {
event_list
})
Ok(GameEventListMessage { event_list })
}
}
}