1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 18:24:05 +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

File diff suppressed because it is too large Load diff

View file

@ -4,10 +4,12 @@ use std::collections::HashMap;
use crate::{ParseError, Result};
pub use super::gameevent_gen::{GameEvent, GameEventType};
use crate::demo::message::gameevent::GameEventTypeId;
#[derive(Debug)]
pub struct GameEventDefinition {
pub id: GameEventType,
pub id: GameEventTypeId,
pub event_type: GameEventType,
pub name: String,
pub entries: Vec<GameEventEntry>,
}

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,
})

View file

@ -12,6 +12,7 @@ use crate::demo::parser::handler::{MessageHandler, StringTableEntryHandler};
use crate::demo::sendprop::SendProp;
use crate::Stream;
use std::mem::replace;
use crate::demo::message::gameevent::GameEventTypeId;
pub type StringEntryHandler = Box<FnMut(&String, &StringTableEntry) -> ()>;
@ -19,7 +20,7 @@ pub type StringEntryHandler = Box<FnMut(&String, &StringTableEntry) -> ()>;
pub struct ParserState {
pub version: u16,
pub static_baselines: HashMap<u32, StaticBaseline>,
pub event_definitions: HashMap<GameEventType, GameEventDefinition>,
pub event_definitions: HashMap<GameEventTypeId, GameEventDefinition>,
pub string_tables: Vec<StringTable>,
pub entity_classes: HashMap<EntityId, ServerClass>,
pub send_tables: HashMap<String, SendTable>,