implement more ESH types

This commit is contained in:
mykola2312 2023-08-31 09:43:45 +03:00
parent 344ec241e7
commit 1339b4da9e
2 changed files with 35 additions and 0 deletions

View file

@ -6,6 +6,12 @@ use super::stream::{ReadStream, WriteStream};
use anyhow::Result; use anyhow::Result;
use indexmap::IndexMap; use indexmap::IndexMap;
#[derive(Debug)]
pub struct ESHUnknown {
pub data_type: u32,
pub data: Vec<u8>
}
#[derive(Debug)] #[derive(Debug)]
pub struct ESHEntityFlags { pub struct ESHEntityFlags {
pub entity_id: u16, pub entity_id: u16,
@ -30,6 +36,7 @@ pub struct ESHRect {
#[derive(Debug)] #[derive(Debug)]
pub enum ESHValue { pub enum ESHValue {
Unknown(ESHUnknown),
Bool(bool), Bool(bool),
Float(f32), Float(f32),
Int(i32), Int(i32),
@ -41,6 +48,18 @@ pub enum ESHValue {
Rect(ESHRect) Rect(ESHRect)
} }
impl ESHValue {
const TYPE_BOOL: u32 = 1;
const TYPE_FLOAT: u32 = 2;
const TYPE_INT: u32 = 3;
const TYPE_STRING: u32 = 4;
const TYPE_SPRITE: u32 = 8;
const TYPE_ESBIN: u32 = 11;
const TYPE_ENTTITYFLAGS: u32 = 12;
const TYPE_FRAME: u32 = 13;
const TYPE_RECT: u32 = 14;
}
#[derive(Debug)] #[derive(Debug)]
pub struct ESH { pub struct ESH {
pub tag: Tag, pub tag: Tag,

View file

@ -52,9 +52,17 @@ impl<'a> ReadStream<'a> {
Ok(self.rdr.read_u16::<LittleEndian>()?) Ok(self.rdr.read_u16::<LittleEndian>()?)
} }
pub fn read_i32(&mut self) -> Result<i32> {
Ok(self.rdr.read_i32::<LittleEndian>()?)
}
pub fn read_u32(&mut self) -> Result<u32> { pub fn read_u32(&mut self) -> Result<u32> {
Ok(self.rdr.read_u32::<LittleEndian>()?) Ok(self.rdr.read_u32::<LittleEndian>()?)
} }
pub fn read_f32(&mut self) -> Result<f32> {
Ok(self.rdr.read_f32::<LittleEndian>()?)
}
} }
pub struct WriteStream { pub struct WriteStream {
@ -95,7 +103,15 @@ impl WriteStream {
Ok(self.buf.write_u16::<LittleEndian>(val)?) Ok(self.buf.write_u16::<LittleEndian>(val)?)
} }
pub fn write_i32(&mut self, val: i32) -> Result<()> {
Ok(self.buf.write_i32::<LittleEndian>(val)?)
}
pub fn write_u32(&mut self, val: u32) -> Result<()> { pub fn write_u32(&mut self, val: u32) -> Result<()> {
Ok(self.buf.write_u32::<LittleEndian>(val)?) Ok(self.buf.write_u32::<LittleEndian>(val)?)
} }
pub fn write_f32(&mut self, val: f32) -> Result<()> {
Ok(self.buf.write_f32::<LittleEndian>(val)?)
}
} }