diff --git a/src/fot/esh.rs b/src/fot/esh.rs index 087d9f4..501c5e7 100644 --- a/src/fot/esh.rs +++ b/src/fot/esh.rs @@ -6,6 +6,12 @@ use super::stream::{ReadStream, WriteStream}; use anyhow::Result; use indexmap::IndexMap; +#[derive(Debug)] +pub struct ESHUnknown { + pub data_type: u32, + pub data: Vec +} + #[derive(Debug)] pub struct ESHEntityFlags { pub entity_id: u16, @@ -30,6 +36,7 @@ pub struct ESHRect { #[derive(Debug)] pub enum ESHValue { + Unknown(ESHUnknown), Bool(bool), Float(f32), Int(i32), @@ -41,6 +48,18 @@ pub enum ESHValue { 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)] pub struct ESH { pub tag: Tag, diff --git a/src/fot/stream.rs b/src/fot/stream.rs index d47c27e..59b205a 100644 --- a/src/fot/stream.rs +++ b/src/fot/stream.rs @@ -52,9 +52,17 @@ impl<'a> ReadStream<'a> { Ok(self.rdr.read_u16::()?) } + pub fn read_i32(&mut self) -> Result { + Ok(self.rdr.read_i32::()?) + } + pub fn read_u32(&mut self) -> Result { Ok(self.rdr.read_u32::()?) } + + pub fn read_f32(&mut self) -> Result { + Ok(self.rdr.read_f32::()?) + } } pub struct WriteStream { @@ -95,7 +103,15 @@ impl WriteStream { Ok(self.buf.write_u16::(val)?) } + pub fn write_i32(&mut self, val: i32) -> Result<()> { + Ok(self.buf.write_i32::(val)?) + } + pub fn write_u32(&mut self, val: u32) -> Result<()> { Ok(self.buf.write_u32::(val)?) } + + pub fn write_f32(&mut self, val: f32) -> Result<()> { + Ok(self.buf.write_f32::(val)?) + } }