mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/units.rs')
-rw-r--r--src/block/units.rs91
1 files changed, 60 insertions, 31 deletions
diff --git a/src/block/units.rs b/src/block/units.rs
index c3def54..9a893d8 100644
--- a/src/block/units.rs
+++ b/src/block/units.rs
@@ -5,8 +5,7 @@ use super::payload::{read_payload_block, read_payload_seq};
use crate::block::simple::*;
use crate::block::*;
use crate::data::command::UnitCommand;
-use crate::data::dynamic::{DynType, DynSerializer};
-use crate::data::Serializer;
+use crate::data::dynamic::DynType;
use crate::unit;
// fn is_pay(b: &str) -> bool {
@@ -35,19 +34,23 @@ use crate::unit;
// )
// }
-make_simple!(AssemblerBlock, |_, name, _, _, rot: Rotation, s| {
- let mut base =
- load!(from name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
- base.overlay(
+make_simple!(
+ AssemblerBlock,
+ |_, name, _, _, rot: Rotation, s| {
+ let mut base =
+ load!(from name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
+ base.overlay(
match rot {
Rotation::Up | Rotation::Right => load!(concat side1 => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s),
Rotation::Down | Rotation::Left => load!(concat side2 => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
}
.rotate(rot.rotated(false).count()),
);
- base.overlay(load!(concat top => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s).borrow());
- base
-}, |_, reg, map, buff| read_assembler(reg, map, buff));
+ base.overlay(load!(concat top => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s).borrow());
+ base
+ },
+ |_, reg, map, buff| read_assembler(reg, map, buff)
+);
/// format:
/// - call [`read_payload_block`]
@@ -56,7 +59,11 @@ make_simple!(AssemblerBlock, |_, name, _, _, rot: Rotation, s| {
/// - read: [`i32`]
/// - call [`read_payload_seq`]
/// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
-fn read_assembler(reg: &BlockRegistry, map: &EntityMapping, buff: &mut DataRead) -> Result<(), DataReadError> {
+fn read_assembler(
+ reg: &BlockRegistry,
+ map: &EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
read_payload_block(reg, map, buff)?;
buff.skip(4)?;
let n = buff.read_u8()? as usize;
@@ -65,24 +72,37 @@ fn read_assembler(reg: &BlockRegistry, map: &EntityMapping, buff: &mut DataRead)
buff.skip(8)
}
-make_simple!(AssemblerModule, |_, _, _, _, rot: Rotation, scl| {
- let mut base = load!("basic-assembler-module", scl);
- base.overlay(
- load!(scl -> match rot {
- Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
- _ => "basic-assembler-module-side2",
- })
- .rotate(rot.rotated(false).count()),
- );
- base
-}, |_, reg, map, buff| read_payload_block(reg, map, buff));
+make_simple!(
+ AssemblerModule,
+ |_, _, _, _, rot: Rotation, scl| {
+ let mut base = load!("basic-assembler-module", scl);
+ base.overlay(
+ load!(scl -> match rot {
+ Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
+ _ => "basic-assembler-module-side2",
+ })
+ .rotate(rot.rotated(false).count()),
+ );
+ base
+ },
+ |_, reg, map, buff| read_payload_block(reg, map, buff)
+);
make_simple!(
- RepairTurret => |scl| {
- let mut bot = load!("block-2", scl);
- let top = load!("repair-turret", scl);
- bot.overlay(&top);
- bot
+ RepairTurret,
+ |_, n, _, _, _, scl| {
+ match n {
+ "repair-turret" => {
+ let mut bot = load!("block-2", scl);
+ bot.overlay(&load!("repair-turret", scl));
+ bot
+ }
+ _ => {
+ let mut bot = load!("repair-point-base", scl);
+ bot.overlay(&load!("repair-point", scl));
+ bot
+ }
+ }
},
|_, _, _, buff: &mut DataRead| {
buff.skip(4) // rotation: [`f32`]
@@ -151,7 +171,10 @@ impl BlockLogic for ConstructorBlock {
match data {
DynData::Empty => Ok(Some(Self::create_state(None))),
DynData::UnitCommand(u) => Ok(Some(Self::create_state(Some(u)))),
- _ => Err(DeserializeError::InvalidType { have: data.get_type(), expect: DynType::UnitCommand })
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::UnitCommand,
+ }),
}
}
@@ -224,11 +247,17 @@ impl BlockLogic for ConstructorBlock {
/// - progress: [`f32`]
/// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
/// - command: [`DynData::UnitCommand`]
- fn read(&self,b: &mut Build,reg: &BlockRegistry,map: &EntityMapping,buff: &mut DataRead,) -> Result<(),DataReadError> {
- read_payload_block(reg,map, buff)?;
+ fn read(
+ &self,
+ _: &mut Build,
+ reg: &BlockRegistry,
+ map: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ read_payload_block(reg, map, buff)?;
buff.skip(12)?;
- // TODO handlerr
- b.state = self.deserialize_state(DynSerializer.deserialize(buff).unwrap()).unwrap();
+ // TODO uncomment when read_payload_block impl finished
+ // b.state = self.deserialize_state(DynSerializer.deserialize(buff).unwrap()).unwrap();
Ok(())
}
}