mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
use vec for event definitions
This commit is contained in:
parent
ecd19f427f
commit
b6f7ebb15a
4 changed files with 14 additions and 19 deletions
|
|
@ -35,8 +35,8 @@ impl Parse for GameEventMessage {
|
||||||
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||||
let length: u16 = stream.read_sized(11)?;
|
let length: u16 = stream.read_sized(11)?;
|
||||||
let mut data = stream.read_bits(length as usize)?;
|
let mut data = stream.read_bits(length as usize)?;
|
||||||
let event_type = data.read()?;
|
let event_type: GameEventTypeId = data.read()?;
|
||||||
let raw_event = match state.event_definitions.get(&event_type) {
|
let raw_event = match state.event_definitions.get(usize::from(event_type)) {
|
||||||
Some(definition) => {
|
Some(definition) => {
|
||||||
let mut values: Vec<GameEventValue> = Vec::with_capacity(definition.entries.len());
|
let mut values: Vec<GameEventValue> = Vec::with_capacity(definition.entries.len());
|
||||||
for entry in &definition.entries {
|
for entry in &definition.entries {
|
||||||
|
|
@ -66,24 +66,18 @@ impl ParseBitSkip for GameEventMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
#[derive(BitRead, Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
pub struct GameEventTypeId(u16);
|
pub struct GameEventTypeId(#[size = 9] u16);
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for GameEventTypeId {
|
impl From<GameEventTypeId> for usize {
|
||||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
|
||||||
Ok(GameEventTypeId(stream.read_int(9)?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<GameEventTypeId> for u16 {
|
|
||||||
fn from(id: GameEventTypeId) -> Self {
|
fn from(id: GameEventTypeId) -> Self {
|
||||||
id.0
|
id.0 as usize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct GameEventListMessage {
|
pub struct GameEventListMessage {
|
||||||
pub event_list: HashMap<GameEventTypeId, GameEventDefinition>,
|
pub event_list: Vec<GameEventDefinition>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for GameEventDefinition {
|
impl BitRead<LittleEndian> for GameEventDefinition {
|
||||||
|
|
@ -116,8 +110,7 @@ impl BitRead<LittleEndian> for GameEventListMessage {
|
||||||
let count: u16 = stream.read_sized(9)?;
|
let count: u16 = stream.read_sized(9)?;
|
||||||
let length: u32 = stream.read_sized(20)?;
|
let length: u32 = stream.read_sized(20)?;
|
||||||
let mut data = stream.read_bits(length as usize)?;
|
let mut data = stream.read_bits(length as usize)?;
|
||||||
let event_list_vec: Vec<GameEventDefinition> = data.read_sized(count as usize)?;
|
let event_list: Vec<GameEventDefinition> = data.read_sized(count as usize)?;
|
||||||
let event_list = HashMap::from_iter(event_list_vec.into_iter().map(|def| (def.id, def)));
|
|
||||||
|
|
||||||
Ok(GameEventListMessage { event_list })
|
Ok(GameEventListMessage { event_list })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,9 @@ use std::num::ParseIntError;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Display)]
|
#[derive(
|
||||||
|
Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Display, Ord, PartialOrd,
|
||||||
|
)]
|
||||||
pub struct EntityId(u32);
|
pub struct EntityId(u32);
|
||||||
|
|
||||||
impl From<u32> for EntityId {
|
impl From<u32> for EntityId {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ use std::ops::Deref;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(BitRead, Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(BitRead, Debug, Clone, Copy, PartialEq, Eq, Hash, Ord, PartialOrd)]
|
||||||
pub struct ClassId(u16);
|
pub struct ClassId(u16);
|
||||||
|
|
||||||
impl FromStr for ClassId {
|
impl FromStr for ClassId {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ pub struct DemoMeta {
|
||||||
pub struct ParserState {
|
pub struct ParserState {
|
||||||
pub static_baselines: HashMap<ClassId, StaticBaseline>,
|
pub static_baselines: HashMap<ClassId, StaticBaseline>,
|
||||||
pub parsed_static_baselines: RefCell<HashMap<ClassId, Vec<SendProp>>>,
|
pub parsed_static_baselines: RefCell<HashMap<ClassId, Vec<SendProp>>>,
|
||||||
pub event_definitions: HashMap<GameEventTypeId, GameEventDefinition>,
|
pub event_definitions: Vec<GameEventDefinition>,
|
||||||
pub string_tables: Vec<StringTableMeta>,
|
pub string_tables: Vec<StringTableMeta>,
|
||||||
pub entity_classes: HashMap<EntityId, Rc<ServerClass>>,
|
pub entity_classes: HashMap<EntityId, Rc<ServerClass>>,
|
||||||
pub send_tables: HashMap<SendTableName, SendTable>,
|
pub send_tables: HashMap<SendTableName, SendTable>,
|
||||||
|
|
@ -55,7 +55,7 @@ impl ParserState {
|
||||||
ParserState {
|
ParserState {
|
||||||
static_baselines: HashMap::new(),
|
static_baselines: HashMap::new(),
|
||||||
parsed_static_baselines: RefCell::new(HashMap::new()),
|
parsed_static_baselines: RefCell::new(HashMap::new()),
|
||||||
event_definitions: HashMap::new(),
|
event_definitions: Vec::new(),
|
||||||
string_tables: Vec::new(),
|
string_tables: Vec::new(),
|
||||||
entity_classes: HashMap::new(),
|
entity_classes: HashMap::new(),
|
||||||
send_tables: HashMap::new(),
|
send_tables: HashMap::new(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue