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:
parent
d7172a14cd
commit
72e025e0ee
4 changed files with 2447 additions and 3479 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -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>,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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>,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue