mindustry logic execution, map- and schematic- parsing and rendering
remove many unused sprites and fix some sprites being incorrectly unused
| -rw-r--r-- | assets/blocks/distribution/ducts/arrow-glow.png | bin | 2058 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/distribution/stack-conveyors/surge-conveyor-glow.png | bin | 2058 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/cliff.png | bin | 213 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/edge-stencil.png | bin | 1847 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/edge.png | bin | 437 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/env-error.png | bin | 169 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/liquid/fluid.png | bin | 71 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/power/steam-generator-turbine.png | bin | 133 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/turrets/bases/reinforced-block-2.png | bin | 472 -> 0 bytes | |||
| -rw-r--r-- | assets/error.png | bin | 215 -> 0 bytes | |||
| -rw-r--r-- | build.rs | 28 | ||||
| -rw-r--r-- | src/block/content.rs | 3 | ||||
| -rw-r--r-- | src/block/distribution.rs | 2 | ||||
| -rw-r--r-- | src/block/liquid.rs | 2 | ||||
| -rw-r--r-- | src/block/production.rs | 45 | ||||
| -rw-r--r-- | src/block/units.rs | 91 | ||||
| -rw-r--r-- | src/data/autotile.rs | 10 |
17 files changed, 118 insertions, 63 deletions
diff --git a/assets/blocks/distribution/ducts/arrow-glow.png b/assets/blocks/distribution/ducts/arrow-glow.png Binary files differdeleted file mode 100644 index 469de30..0000000 --- a/assets/blocks/distribution/ducts/arrow-glow.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-glow.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-glow.png Binary files differdeleted file mode 100644 index 469de30..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-glow.png +++ /dev/null diff --git a/assets/blocks/environment/cliff.png b/assets/blocks/environment/cliff.png Binary files differdeleted file mode 100644 index e2756c7..0000000 --- a/assets/blocks/environment/cliff.png +++ /dev/null diff --git a/assets/blocks/environment/edge-stencil.png b/assets/blocks/environment/edge-stencil.png Binary files differdeleted file mode 100644 index 302e9ab..0000000 --- a/assets/blocks/environment/edge-stencil.png +++ /dev/null diff --git a/assets/blocks/environment/edge.png b/assets/blocks/environment/edge.png Binary files differdeleted file mode 100644 index bd38d6c..0000000 --- a/assets/blocks/environment/edge.png +++ /dev/null diff --git a/assets/blocks/environment/env-error.png b/assets/blocks/environment/env-error.png Binary files differdeleted file mode 100644 index fbd397f..0000000 --- a/assets/blocks/environment/env-error.png +++ /dev/null diff --git a/assets/blocks/liquid/fluid.png b/assets/blocks/liquid/fluid.png Binary files differdeleted file mode 100644 index 0d9e7e3..0000000 --- a/assets/blocks/liquid/fluid.png +++ /dev/null diff --git a/assets/blocks/power/steam-generator-turbine.png b/assets/blocks/power/steam-generator-turbine.png Binary files differdeleted file mode 100644 index d72808b..0000000 --- a/assets/blocks/power/steam-generator-turbine.png +++ /dev/null diff --git a/assets/blocks/turrets/bases/reinforced-block-2.png b/assets/blocks/turrets/bases/reinforced-block-2.png Binary files differdeleted file mode 100644 index 29f837f..0000000 --- a/assets/blocks/turrets/bases/reinforced-block-2.png +++ /dev/null diff --git a/assets/error.png b/assets/error.png Binary files differdeleted file mode 100644 index 005c405..0000000 --- a/assets/error.png +++ /dev/null @@ -35,7 +35,7 @@ fn main() { // let mut half = File::create(o.join("half.rs")).unwrap(); let mut quar = File::create(o.join("quar.rs")).unwrap(); let mut eigh = File::create(o.join("eigh.rs")).unwrap(); - let mut n = 5usize; + let mut n = 23usize; wr!(full => "pub mod full {{"); wr!(full => "pub static EMPTY: LazyLock<RgbaImage> = LazyLock::new(|| RgbaImage::new(32, 32));"); @@ -50,14 +50,11 @@ fn main() { file.write_all(b"macro_rules!img{($v:expr)=>{{static TMP:LazyLock<RgbaImage>=LazyLock::new(||$v);&TMP}};}\n").unwrap(); wr!(file => "use image::RgbaImage;"); wr!(file => "use crate::utils::Lock as LazyLock;"); + wr!(file => "pub static CLIFF: &LazyLock<RgbaImage> = &EMPTY;"); + for i in 1..=16 { + wr!(file => "pub static BUILD{}: &LazyLock<RgbaImage> = &EMPTY;", i); + } } - for i in 1..=16 { - n += 1; - wr!(full => "pub static BUILD{}: &LazyLock<RgbaImage> = &EMPTY;", i); - wr!(quar => "pub static BUILD{}: &LazyLock<RgbaImage> = &EMPTY;", i); - wr!(eigh => "pub static BUILD{}: &LazyLock<RgbaImage> = &EMPTY;", i); - } - let mut warmup = File::create(o.join("warmup.rs")).unwrap(); wr!(warmup => "/// # Safety\n///\n/// this function must only be called once."); wr!(warmup => "pub unsafe fn warmup() {{"); @@ -66,12 +63,17 @@ fn main() { let path = e.path(); if path.is_file() && let Some(e) = path.extension() && e == "png" { let p = DynamicImage::from_decoder(PngDecoder::new(BufReader::new(File::open(path).unwrap())).unwrap()).unwrap().into_rgba8(); - let f = path.to_str().unwrap(); - if f.contains("-bottom.png") || f.contains("-liquid.png") || f.contains("-team") { + if path.file_name().unwrap().to_str().unwrap().contains("-liquid.png") { + continue + } + let f = path.file_name().unwrap().to_str().unwrap(); + if f.contains("bottom") || f.contains("-team") || f.contains("-end") || f.contains("stack") { continue; } - let path = path.with_extension(""); - let path = kebab2bigsnek(path.file_name().unwrap().to_str().unwrap()); + let path = kebab2bigsnek(path.with_extension("").file_name().unwrap().to_str().unwrap()); + if matches!(path.as_str(), "CLIFF_CRUSHER_ROTATOR" | "NEOPLASIA_REACTOR_CENTER" | "FLUX_REACTOR_MID" | "EDGE" | "PHASE_CONVEYOR_BRIDGE" | "BRIDGE_ARROW" | "DUCT_BRIDGE_BRIDGE" | "DUCT_BRIDGE_ARROW" | "LAUNCHPOD" | "BRIDGE_CONVEYOR_BRIDGE" | "BRIDGE_CONVEYOR_ARROW" | "PHASE_CONVEYOR_ARROW" | "REINFORCED_BRIDGE_CONDUIT_ARROW" | "REINFORCED_BRIDGE_CONDUIT_BRIDGE" | "PHASE_CONDUIT_BRIDGE" | "BRIDGE_CONDUIT_ARROW" | "PHASE_CONDUIT_ARROW" | "BRIDGE_CONDUIT_BRIDGE" | "PLATED_CONDUIT_CAP") { + continue + } macro_rules! writ { ($ext:ident / $scale:literal) => { let mut buf = File::create(o.join(n.to_string() + "-" + stringify!($ext))).unwrap(); @@ -100,7 +102,7 @@ fn main() { let y = new.height(); buf.write_all(&new.into_raw()).unwrap(); wr!($ext => - r#"pub static {path}: &LazyLock<RgbaImage> = img!(unsafe {{ RgbaImage::from_vec({x}, {y}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")).to_vec()).unwrap_unchecked() }});"#, + r#"pub(crate) static {path}: &LazyLock<RgbaImage> = img!(unsafe {{ RgbaImage::from_vec({x}, {y}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")).to_vec()).unwrap_unchecked() }});"#, stringify!($ext) ); }; diff --git a/src/block/content.rs b/src/block/content.rs index 2275f6d..d07eb05 100644 --- a/src/block/content.rs +++ b/src/block/content.rs @@ -1,5 +1,5 @@ //! everything -use crate::content::{content_enum}; +use crate::content::content_enum; content_enum! { pub enum Type / Block for u16 | TryFromU16Error @@ -418,4 +418,3 @@ content_enum! { "world-message", } } - diff --git a/src/block/distribution.rs b/src/block/distribution.rs index 46e0f2c..933636b 100644 --- a/src/block/distribution.rs +++ b/src/block/distribution.rs @@ -251,7 +251,7 @@ impl BlockLogic for ItemBlock { let mut top = load!("duct-unloader-top", s); top.rotate(rot.rotated(false).count()); p.overlay(&top); - let mut arrow = load!("top", s); + let mut arrow = load!("duct-unloader-arrow", s); arrow.rotate(rot.rotated(false).count()); p.overlay(&arrow); p diff --git a/src/block/liquid.rs b/src/block/liquid.rs index 4816e5a..7164885 100644 --- a/src/block/liquid.rs +++ b/src/block/liquid.rs @@ -18,7 +18,7 @@ make_simple!( let (index, rot, flip) = mask2rotations(mask, rot); // TODO caps. stopped trying bcz too complex - rotations2tile((index, rot, flip), "conduit", s) + rotations2tile((index, rot, flip), name, s) }, true ); diff --git a/src/block/production.rs b/src/block/production.rs index 17e758b..5f2b122 100644 --- a/src/block/production.rs +++ b/src/block/production.rs @@ -24,7 +24,7 @@ make_register! { "coal-centrifuge" -> ProductionBlock::new(2, true, cost!(Lead: 30, Graphite: 40, Titanium: 20)); "incinerator" -> BasicBlock::new(1, true, cost!(Lead: 15, Graphite: 5)); "silicon-arc-furnace" -> ProductionBlock::new(3, true, cost!(Beryllium: 70, Graphite: 80)); - "electrolyzer" -> ProductionBlock::new(3, true, cost!(Silicon: 50, Graphite: 40, Beryllium: 130, Tungsten: 80)); + "electrolyzer" => ProductionBlock::new(3, true, cost!(Silicon: 50, Graphite: 40, Beryllium: 130, Tungsten: 80)); "atmospheric-concentrator" -> ProductionBlock::new(3, true, cost!(Oxide: 60, Beryllium: 180, Silicon: 150)); "oxidation-chamber" => HeatCrafter::new(3, true, cost!(Tungsten: 120, Graphite: 80, Silicon: 100, Beryllium: 120)); "electric-heater" => HeatCrafter::new(2, false, cost!(Tungsten: 30, Oxide: 30)); @@ -47,7 +47,27 @@ make_register! { make_simple!(SeparatorBlock => |_, _, _, buff: &mut DataRead| buff.skip(12)); make_simple!( - ProductionBlock => + ProductionBlock, + |_, _, _, _, r: Rotation, s| { + // electrolyzer exclusive + // ozone <- e(^) -> hydrogen + let mut base = load!("electrolyzer", s); + base.overlay( + load!(s -> match r { + Rotation::Up | Rotation::Left => "electrolyzer-hydrogen-output1" + Rotation::Down | Rotation::Right => "electrolyzer-hydrogen-output2" + }) + .rotate(r.count()), + ); + base.overlay( + load!(s -> match r { + Rotation::Down | Rotation::Right => "electrolyzer-ozone-output1" + Rotation::Up | Rotation::Left => "electrolyzer-ozone-output2" + }) + .rotate(r.mirrored(true, true).count()), + ); + base + }, |b: &mut Build<'_>, _, _, buff: &mut DataRead| { // format: // - progress: `f32` @@ -55,7 +75,6 @@ make_simple!( // (cultivator) // `f32` buff.skip(8 + if b.name() == "cultivator" { 4 } else { 0 }) - } ); @@ -68,9 +87,8 @@ make_simple!( let mut base = load!(from n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater"], s); base.overlay( match r { - Rotation::Up | Rotation::Right => - load!(concat top1 => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater"], s), - _ => load!(concat top2 => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater"], s) + Rotation::Up | Rotation::Right => load!(concat top1 => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater"], s), + Rotation::Down | Rotation::Left => load!(concat top2 => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater"], s) } .rotate(r.rotated(false).count()), ); @@ -90,9 +108,16 @@ make_simple!( ); make_simple!(HeatConduit, |_, n, _, _, r: Rotation, s| { let mut base = load!(from n which is ["heat-router" | "heat-redirector"], s); - base.overlay(match r { - Rotation::Up | Rotation::Right => load!(concat top1 => n which is ["heat-router" | "heat-redirector"], s), - _ => load!(concat top2 => n which is ["heat-router" | "heat-redirector"], s), - }.rotate(r.rotated(false).count())); + base.overlay( + match r { + Rotation::Up | Rotation::Right => { + load!(concat top1 => n which is ["heat-router" | "heat-redirector"], s) + } + Rotation::Down | Rotation::Left => { + load!(concat top2 => n which is ["heat-router" | "heat-redirector"], s) + } + } + .rotate(r.rotated(false).count()), + ); base }); 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(()) } } diff --git a/src/data/autotile.rs b/src/data/autotile.rs index 76aed59..c7af8e1 100644 --- a/src/data/autotile.rs +++ b/src/data/autotile.rs @@ -226,19 +226,19 @@ pub fn flrot(flip: u8, rot: u8, with: &mut ImageHolder) { pub fn rotations2tile((index, rot, flip): (u8, u8, u8), name: &str, scale: Scale) -> ImageHolder { let mut p = match index { 0 => { - load!(concat 0 => name which is ["armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) + load!(concat 0 => name which is ["reinforced-conduit" | "armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) } 1 => { - load!(concat 1 => name which is ["armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) + load!(concat 1 => name which is ["reinforced-conduit" | "armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) } 2 => { - load!(concat 2 => name which is ["armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) + load!(concat 2 => name which is ["reinforced-conduit" | "armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) } 3 => { - load!(concat 3 => name which is ["armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) + load!(concat 3 => name which is ["reinforced-conduit" | "armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) } _ => { - load!(concat 4 => name which is ["armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) + load!(concat 4 => name which is ["reinforced-conduit" | "armored-duct" | "pulse-conduit" | "plated-conduit" | "conduit" | "conveyor" | "titanium-conveyor" | "armored-conveyor" | "duct"], scale) } }; flrot(flip, rot, p.borrow_mut()); |