mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/logic.rs')
-rw-r--r--src/block/logic.rs54
1 files changed, 8 insertions, 46 deletions
diff --git a/src/block/logic.rs b/src/block/logic.rs
index 153f637..9bbe24e 100644
--- a/src/block/logic.rs
+++ b/src/block/logic.rs
@@ -3,14 +3,14 @@ use std::borrow::Cow;
use std::string::FromUtf8Error;
use crate::block::simple::*;
-use crate::data::dynamic::{DynSerializer, DynType};
-use crate::{block::*, Serializer};
+use crate::data::dynamic::DynType;
+use crate::{block::*, Serializable};
use crate::data::{self, CompressError, DataRead, DataWrite};
make_simple!(
MemoryBlock =>
- |_, _, buff: &mut DataRead| {
+ |_, buff: &mut DataRead| {
// format:
// - iterate [`u32`]
// - memory: [`f64`]
@@ -19,24 +19,6 @@ make_simple!(
}
);
-make_register! {
- "reinforced-message" -> MessageLogic::new(1, true, cost!(Graphite: 10, Beryllium: 5));
- "message" -> MessageLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
- "switch" => SwitchLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
- "micro-processor" -> ProcessorLogic::new(1, true, cost!(Copper: 90, Lead: 50, Silicon: 50));
- "logic-processor" -> ProcessorLogic::new(2, true, cost!(Lead: 320, Graphite: 60, Thorium: 50, Silicon: 80));
- "hyper-processor" -> ProcessorLogic::new(3, true, cost!(Lead: 450, Thorium: 75, Silicon: 150, SurgeAlloy: 50));
- "memory-cell" -> MemoryBlock::new(1, true, cost!(Copper: 30, Graphite: 30, Silicon: 30));
- "memory-bank" -> MemoryBlock::new(2, true, cost!(Copper: 30, Graphite: 80, Silicon: 80, PhaseFabric: 30));
- "logic-display" -> BasicBlock::new(3, true, cost!(Lead: 100, Metaglass: 50, Silicon: 50));
- "large-logic-display" -> BasicBlock::new(6, true, cost!(Lead: 200, Metaglass: 100, Silicon: 150, PhaseFabric: 75));
- "canvas" => CanvasBlock::new(2, true, cost!(Silicon: 30, Beryllium: 10), 12);
- // editor only
- "world-processor" -> BasicBlock::new(1, true, &[]);
- "world-message" -> MessageLogic::new(1, true, &[]);
- "world-cell" -> MemoryBlock::new(1, true, &[]);
-}
-
pub struct CanvasBlock {
size: u8,
symmetric: bool,
@@ -177,12 +159,7 @@ impl BlockLogic for CanvasBlock {
/// format:
/// - len: [`i32`]
/// - read(len) -> [`deser_canvas_image`]
- fn read(
- &self,
- build: &mut Build,
- _: &BlockRegistry,
- buff: &mut DataRead,
- ) -> Result<(), DataReadError> {
+ fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
let n = buff.read_i32()? as usize;
let mut b = vec![0; n];
buff.read_bytes(&mut b)?;
@@ -251,12 +228,7 @@ impl BlockLogic for MessageLogic {
Ok(DynData::String(Some(Self::get_state(state).clone())))
}
- fn read(
- &self,
- b: &mut Build,
- _: &BlockRegistry,
- buff: &mut DataRead,
- ) -> Result<(), DataReadError> {
+ fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
b.state = Some(Self::create_state(buff.read_utf()?.to_string()));
Ok(())
}
@@ -304,12 +276,7 @@ impl BlockLogic for SwitchLogic {
Ok(DynData::Boolean(*Self::get_state(state)))
}
- fn read(
- &self,
- build: &mut Build,
- _: &BlockRegistry,
- buff: &mut DataRead,
- ) -> Result<(), DataReadError> {
+ fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
build.state = Some(Self::create_state(buff.read_bool()?));
Ok(())
}
@@ -409,12 +376,7 @@ impl BlockLogic for ProcessorLogic {
}
}
- fn read(
- &self,
- b: &mut Build,
- _: &BlockRegistry,
- buff: &mut DataRead,
- ) -> Result<(), DataReadError> {
+ fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
let n = buff.read_u32()? as usize;
let mut v = vec![0; n];
buff.read_bytes(&mut v)?;
@@ -424,7 +386,7 @@ impl BlockLogic for ProcessorLogic {
));
for _ in 0..buff.read_u32()? {
let _ = buff.read_utf()?;
- let _ = DynSerializer.deserialize(buff).unwrap();
+ let _ = DynData::deserialize(buff).unwrap();
}
let memory = buff.read_u32()? as usize;
buff.skip(memory * 8)?;