mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 10:14:06 +02:00
game event write work
This commit is contained in:
parent
36077864ad
commit
71f85bfe45
4 changed files with 1672 additions and 913 deletions
1214
codegen/out.rs
1214
codegen/out.rs
File diff suppressed because it is too large
Load diff
|
|
@ -225,10 +225,10 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
|
|||
let span = Span::call_site();
|
||||
|
||||
let imports = quote!(
|
||||
use super::gamevent::{FromGameEventValue, GameEventDefinition, GameEventEntry, RawGameEvent};
|
||||
use super::gamevent::{EventValue, GameEventDefinition, GameEventEntry, RawGameEvent};
|
||||
use crate::demo::Stream;
|
||||
use crate::{ParseError, Result};
|
||||
use bitbuffer::{BitRead, LittleEndian};
|
||||
use bitbuffer::{BitRead, LittleEndian, BitWrite, BitWriteStream};
|
||||
);
|
||||
|
||||
let event_definitions = events.iter().map(|event| {
|
||||
|
|
@ -260,7 +260,7 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
|
|||
};
|
||||
|
||||
quote!(
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, BitWrite)]
|
||||
pub struct #name {
|
||||
#(#fields)*
|
||||
}
|
||||
|
|
@ -332,6 +332,15 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
|
|||
}
|
||||
});
|
||||
|
||||
let write_events = events.iter().map(|event| {
|
||||
let name = get_event_name(&event.name);
|
||||
let variant_name = Ident::new(&name, span);
|
||||
|
||||
quote!(
|
||||
GameEvent::#variant_name(event) => event.write(stream),
|
||||
)
|
||||
});
|
||||
|
||||
let sizes = events.iter().map(|event| {
|
||||
let name = get_event_name(&event.name);
|
||||
let struct_name = Ident::new(&format!("{}Event", name), span);
|
||||
|
|
@ -344,7 +353,7 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
|
|||
quote!(
|
||||
#imports
|
||||
|
||||
fn read_value<'a, T: FromGameEventValue + BitRead<'a, LittleEndian> + Default>(
|
||||
fn read_value<'a, T: EventValue + BitRead<'a, LittleEndian> + Default>(
|
||||
stream: &mut Stream<'a>,
|
||||
entry: Option<&GameEventEntry>,
|
||||
name: &'static str,
|
||||
|
|
@ -401,6 +410,12 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
|
|||
GameEventType::Unknown => GameEvent::Unknown(RawGameEvent::read(stream, definition)?),
|
||||
})
|
||||
}
|
||||
pub fn write(&self, stream: &mut BitWriteStream<LittleEndian>) -> bitbuffer::Result<()> {
|
||||
match &self {
|
||||
#(#write_events)*
|
||||
GameEvent::Unknown(raw) => raw.write(stream),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_sizes() -> fnv::FnvHashMap<&'static str, usize> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue