mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/logic.rs')
| -rw-r--r-- | src/block/logic.rs | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/src/block/logic.rs b/src/block/logic.rs index ce202bc..9595673 100644 --- a/src/block/logic.rs +++ b/src/block/logic.rs @@ -12,8 +12,7 @@ use crate::data::{self, CompressError, DataRead, DataWrite}; make_simple!(LogicBlock); make_simple!( - MemoryBlock, - |_, _, _, _, _, _| None, + MemoryBlock => |_, _, _, buff: &mut DataRead| { // format: // - iterate [`u32`] @@ -147,12 +146,11 @@ impl BlockLogic for CanvasBlock { /// i thought about drawing the borders and stuff but it felt like too much work fn draw( &self, - c: &str, n: &str, state: Option<&State>, _: Option<&RenderingContext>, _: Rotation, - ) -> Option<ImageHolder> { + ) -> ImageHolder { if let Some(state) = state { let state = self.clone_state(state); let p = state.downcast::<RgbImage>().unwrap(); @@ -169,15 +167,18 @@ impl BlockLogic for CanvasBlock { .into_rgba8() .scale((self.size as u32 * 32) - 14) }; - let mut borders = load(c, n).unwrap().to_owned(); + let mut borders = load(n); borders.overlay_at(&p, 7, 7); - return Some(ImageHolder::from(borders)); + return borders; } - Some(ImageHolder::from(RgbaImage::new( - self.size as u32 * 32, - self.size as u32 * 32, - ))) + let mut def = RgbaImage::new(self.size as u32 * 32, self.size as u32 * 32); + for image::Rgba([r, g, b, _]) in def.pixels_mut() { + *r = PALETTE[0][0]; + *g = PALETTE[0][1]; + *b = PALETTE[0][2]; + } + ImageHolder::from(def) } /// format: @@ -228,6 +229,16 @@ impl BlockLogic for MessageLogic { Ok(DynData::Empty) } + fn draw( + &self, + name: &str, + _: Option<&State>, + _: Option<&RenderingContext>, + _: Rotation, + ) -> ImageHolder { + read(name, self.size) + } + fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> { match data { DynData::Empty | DynData::String(None) => Ok(Some(Self::create_state(String::new()))), @@ -323,21 +334,19 @@ impl BlockLogic for SwitchLogic { fn draw( &self, _: &str, - _: &str, state: Option<&State>, _: Option<&RenderingContext>, _: Rotation, - ) -> Option<ImageHolder> { - let base = load("logic", "switch").unwrap(); + ) -> ImageHolder { + let mut base = load("switch"); if let Some(state) = state { if *Self::get_state(state) { - let mut base = base.clone(); - let on = load("logic", "switch-on").unwrap(); + let on = load("switch-on"); base.overlay(&on); - return Some(ImageHolder::from(base)); + return base; } } - Some(ImageHolder::from(base)) + base } } @@ -394,6 +403,16 @@ fn read_decompressed(buff: &mut DataRead) -> Result<ProcessorState, ProcessorDes impl BlockLogic for ProcessorLogic { impl_block!(); + fn draw( + &self, + name: &str, + _: Option<&State>, + _: Option<&RenderingContext>, + _: Rotation, + ) -> ImageHolder { + read(name, self.size) + } + fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> { Ok(DynData::Empty) } |