mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/data/schematic.rs')
| -rw-r--r-- | src/data/schematic.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/data/schematic.rs b/src/data/schematic.rs index 53c73fd..7c43ad2 100644 --- a/src/data/schematic.rs +++ b/src/data/schematic.rs @@ -11,7 +11,7 @@ use flate2::{Compress, CompressError, Compression, Decompress, DecompressError, use crate::block::{self, Block, BlockRegistry, Rotation}; use crate::data::{self, DataRead, DataWrite, GridPos, Serializer}; use crate::data::base64; -use crate::data::dynamic::{self, DynSerializer, DynData}; +use crate::data::dynamic::{self, DynData, DynSerializer}; pub const MAX_DIMENSION: u16 = 128; pub const MAX_BLOCKS: u32 = 128 * 128; @@ -798,7 +798,7 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> let block = block_table[idx as usize]; let config = if version < 1 { - block.data_from_i32(rbuff.read_i32()?, pos) + block.data_from_i32(rbuff.read_i32()?, pos)? } else {DynSerializer.deserialize(&mut rbuff)?}; let rot = Rotation::from(rbuff.read_u8()?); @@ -937,6 +937,7 @@ pub enum ReadError NoSuchBlock(String), BlockCount(i32), BlockIndex(i8, usize), + BlockConfig(block::DataConvertError), BlockState(dynamic::ReadError), Placement(PlaceError), } @@ -965,6 +966,14 @@ impl From<dynamic::ReadError> for ReadError } } +impl From<block::DataConvertError> for ReadError +{ + fn from(value: block::DataConvertError) -> Self + { + Self::BlockConfig(value) + } +} + impl From<PlaceError> for ReadError { fn from(value: PlaceError) -> Self @@ -989,6 +998,7 @@ impl fmt::Display for ReadError ReadError::NoSuchBlock(name) => write!(f, "unknown block {name:?}"), ReadError::BlockCount(cnt) => write!(f, "invalid total block count ({cnt})"), ReadError::BlockIndex(idx, cnt) => write!(f, "invalid block index ({idx} / {cnt})"), + ReadError::BlockConfig(e) => e.fmt(f), ReadError::BlockState(e) => e.fmt(f), ReadError::Placement(e) => e.fmt(f), } @@ -1003,6 +1013,7 @@ impl Error for ReadError { ReadError::Read(e) => Some(e), ReadError::Decompress(e) => Some(e), + ReadError::BlockConfig(e) => Some(e), ReadError::BlockState(e) => Some(e), ReadError::Placement(e) => Some(e), _ => None, |