1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 10:14:06 +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}; use crate::{ParseError, Result};
pub use super::gameevent_gen::{GameEvent, GameEventType}; pub use super::gameevent_gen::{GameEvent, GameEventType};
use crate::demo::message::gameevent::GameEventTypeId;
#[derive(Debug)] #[derive(Debug)]
pub struct GameEventDefinition { pub struct GameEventDefinition {
pub id: GameEventType, pub id: GameEventTypeId,
pub event_type: GameEventType,
pub name: String, pub name: String,
pub entries: Vec<GameEventEntry>, pub entries: Vec<GameEventEntry>,
} }

View file

@ -3,12 +3,12 @@ use std::iter::FromIterator;
use bitstream_reader::{BitRead, BitReadSized, LittleEndian}; use bitstream_reader::{BitRead, BitReadSized, LittleEndian};
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
use crate::demo::gameevent_gen::GameEventType; use crate::demo::gameevent_gen::GameEventType;
use crate::demo::gamevent::{ use crate::demo::gamevent::{
GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType, GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType,
RawGameEvent, RawGameEvent,
}; };
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> { fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
Ok(match definition.kind { Ok(match definition.kind {
@ -40,7 +40,7 @@ impl Parse for GameEventMessage {
values.push(read_event_value(&mut data, &entry)?); values.push(read_event_value(&mut data, &entry)?);
} }
RawGameEvent { event_type, values } RawGameEvent { event_type: definition.event_type, values }
} }
None => unreachable!(), 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)] #[derive(Debug)]
pub struct GameEventListMessage { pub struct GameEventListMessage {
pub event_list: HashMap<GameEventType, GameEventDefinition>, pub event_list: HashMap<GameEventTypeId, GameEventDefinition>,
} }
impl BitRead<LittleEndian> for GameEventDefinition { impl BitRead<LittleEndian> for GameEventDefinition {
fn read(stream: &mut Stream) -> ReadResult<Self> { fn read(stream: &mut Stream) -> ReadResult<Self> {
let event_type = stream.read()?; let event_type:GameEventTypeId = stream.read()?;
let name = stream.read()?; let name: String = stream.read()?;
let mut entries = Vec::new(); let mut entries = Vec::new();
let mut entry_type = stream.read()?; let mut entry_type = stream.read()?;
@ -72,6 +81,7 @@ impl BitRead<LittleEndian> for GameEventDefinition {
Ok(GameEventDefinition { Ok(GameEventDefinition {
id: event_type, id: event_type,
event_type: GameEventType::from_type_name(name.as_str()),
name, name,
entries, entries,
}) })

View file

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