Add data parser for circuit boards

This commit is contained in:
Adam Gausmann 2022-10-28 22:54:14 -05:00
parent 6cc08354b5
commit 57cf820ac0
2 changed files with 49 additions and 0 deletions

48
src/custom_data.rs Normal file
View file

@ -0,0 +1,48 @@
//! Parsers and serializers for vanilla component data.
//!
//! These are designed for Logic World 0.91.0 Preview 510 and may not work for
//! other game versions.
use std::io::{Read, Write};
use crate::error::Error;
use crate::io::*;
pub trait ComponentData: Sized {
const TYPE_STRING: &'static str;
fn read<R: Read>(reader: &mut R) -> Result<Self, Error>;
fn write<W: Write>(&self, writer: &mut W) -> Result<(), Error>;
}
#[derive(Debug)]
pub struct CircuitBoard {
pub color: [u8; 3],
pub size_x: u32,
pub size_z: u32,
}
impl ComponentData for CircuitBoard {
const TYPE_STRING: &'static str = "MHG.CircuitBoard";
fn read<R: Read>(reader: &mut R) -> Result<Self, Error> {
let color = read_array(|| read_u8(reader))?;
let size_x = read_u32(reader)?;
let size_z = read_u32(reader)?;
Ok(Self {
color,
size_x,
size_z,
})
}
fn write<W: Write>(&self, writer: &mut W) -> Result<(), Error> {
for x in self.color {
write_u8(x, writer)?;
}
write_u32(self.size_x, writer)?;
write_u32(self.size_z, writer)?;
Ok(())
}
}

View file

@ -1,4 +1,5 @@
mod convert;
pub mod custom_data;
pub mod error;
pub(crate) mod io;
pub mod v5;