1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 02:24:12 +02:00

stable game event types

This commit is contained in:
Robin Appelman 2019-03-04 23:57:30 +01:00
commit 72e025e0ee
4 changed files with 2447 additions and 3479 deletions

View file

@ -3,12 +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::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
Ok(match definition.kind {
@ -40,7 +40,7 @@ impl Parse for GameEventMessage {
values.push(read_event_value(&mut data, &entry)?);
}
RawGameEvent { event_type, values }
RawGameEvent { event_type: definition.event_type, values }
}
None => unreachable!(),
};
@ -49,15 +49,24 @@ impl Parse for GameEventMessage {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct GameEventTypeId(u16);
impl BitRead<LittleEndian> for GameEventTypeId {
fn read(stream: &mut Stream) -> ReadResult<Self> {
Ok(GameEventTypeId(stream.read_int(9)?))
}
}
#[derive(Debug)]
pub struct GameEventListMessage {
pub event_list: HashMap<GameEventType, GameEventDefinition>,
pub event_list: HashMap<GameEventTypeId, GameEventDefinition>,
}
impl BitRead<LittleEndian> for GameEventDefinition {
fn read(stream: &mut Stream) -> ReadResult<Self> {
let event_type = stream.read()?;
let name = stream.read()?;
let event_type:GameEventTypeId = stream.read()?;
let name: String = stream.read()?;
let mut entries = Vec::new();
let mut entry_type = stream.read()?;
@ -72,6 +81,7 @@ impl BitRead<LittleEndian> for GameEventDefinition {
Ok(GameEventDefinition {
id: event_type,
event_type: GameEventType::from_type_name(name.as_str()),
name,
entries,
})