Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--mindus/Cargo.toml2
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-33.pngbin237 -> 236 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-36.pngbin255 -> 254 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-38.pngbin254 -> 253 bytes
-rw-r--r--mindus/assets/blocks/campaign/landing-pad-bg.pngbin0 -> 182 bytes
-rw-r--r--mindus/assets/blocks/environment/pur-bush.pngbin204 -> 176 bytes
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-1.pngbin368 -> 271 bytes
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-2.pngbin337 -> 262 bytes
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-3.pngbin290 -> 226 bytes
-rw-r--r--mindus/assets/blocks/environment/yellowcoral.pngbin382 -> 317 bytes
-rw-r--r--mindus/assets/blocks/logic/large-canvas.pngbin717 -> 330 bytes
-rw-r--r--mindus/assets/blocks/turrets/salvo.pngbin1353 -> 657 bytes
-rw-r--r--mindus/src/block/campaign.rs90
-rw-r--r--mindus/src/block/distribution.rs4
-rw-r--r--mindus/src/block/mod.rs5
-rw-r--r--mindus/src/block/ratios.rs1
-rw-r--r--mindus/src/data/map.rs2
17 files changed, 98 insertions, 6 deletions
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml
index 2c208a0..8015603 100644
--- a/mindus/Cargo.toml
+++ b/mindus/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mindus"
-version = "5.0.45"
+version = "5.0.46"
edition = "2024"
description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
authors = [
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-33.png b/mindus/assets/blocks/autotiles/metal-wall-1-33.png
index 5a534cb..4749954 100644
--- a/mindus/assets/blocks/autotiles/metal-wall-1-33.png
+++ b/mindus/assets/blocks/autotiles/metal-wall-1-33.png
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-36.png b/mindus/assets/blocks/autotiles/metal-wall-1-36.png
index 8c6515e..f834622 100644
--- a/mindus/assets/blocks/autotiles/metal-wall-1-36.png
+++ b/mindus/assets/blocks/autotiles/metal-wall-1-36.png
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-38.png b/mindus/assets/blocks/autotiles/metal-wall-1-38.png
index de93d55..a11902c 100644
--- a/mindus/assets/blocks/autotiles/metal-wall-1-38.png
+++ b/mindus/assets/blocks/autotiles/metal-wall-1-38.png
Binary files differ
diff --git a/mindus/assets/blocks/campaign/landing-pad-bg.png b/mindus/assets/blocks/campaign/landing-pad-bg.png
new file mode 100644
index 0000000..f02ccb8
--- /dev/null
+++ b/mindus/assets/blocks/campaign/landing-pad-bg.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/pur-bush.png b/mindus/assets/blocks/environment/pur-bush.png
index 9fe4180..32c7201 100644
--- a/mindus/assets/blocks/environment/pur-bush.png
+++ b/mindus/assets/blocks/environment/pur-bush.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/metal-wall-1.png b/mindus/assets/blocks/environment/single/metal-wall-1.png
index 95adac5..1a7fadb 100644
--- a/mindus/assets/blocks/environment/single/metal-wall-1.png
+++ b/mindus/assets/blocks/environment/single/metal-wall-1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/metal-wall-2.png b/mindus/assets/blocks/environment/single/metal-wall-2.png
index 2f0db5b..a913a43 100644
--- a/mindus/assets/blocks/environment/single/metal-wall-2.png
+++ b/mindus/assets/blocks/environment/single/metal-wall-2.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/metal-wall-3.png b/mindus/assets/blocks/environment/single/metal-wall-3.png
index 9806760..703fcd9 100644
--- a/mindus/assets/blocks/environment/single/metal-wall-3.png
+++ b/mindus/assets/blocks/environment/single/metal-wall-3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellowcoral.png b/mindus/assets/blocks/environment/yellowcoral.png
index 5a96fe2..bbc76b4 100644
--- a/mindus/assets/blocks/environment/yellowcoral.png
+++ b/mindus/assets/blocks/environment/yellowcoral.png
Binary files differ
diff --git a/mindus/assets/blocks/logic/large-canvas.png b/mindus/assets/blocks/logic/large-canvas.png
index ab09c2a..36c0312 100644
--- a/mindus/assets/blocks/logic/large-canvas.png
+++ b/mindus/assets/blocks/logic/large-canvas.png
Binary files differ
diff --git a/mindus/assets/blocks/turrets/salvo.png b/mindus/assets/blocks/turrets/salvo.png
index d725e4e..3efea07 100644
--- a/mindus/assets/blocks/turrets/salvo.png
+++ b/mindus/assets/blocks/turrets/salvo.png
Binary files differ
diff --git a/mindus/src/block/campaign.rs b/mindus/src/block/campaign.rs
new file mode 100644
index 0000000..8b0e52e
--- /dev/null
+++ b/mindus/src/block/campaign.rs
@@ -0,0 +1,90 @@
+use fimg::Overlay;
+
+use crate::{
+ block::{
+ BlockLogic, DataConvertError, DeserializeError, SerializeError, State,
+ all::{ItemConvertError, ItemDeserializeError},
+ impl_block,
+ simple::{BuildCost, state_impl},
+ },
+ content,
+ data::{
+ GridPos,
+ dynamic::{DynData, DynType},
+ },
+ item::Type as Item,
+ load,
+ utils::{ImageHolder, ImageUtils},
+};
+
+pub struct LandingPadBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl LandingPadBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> LandingPadBlock {
+ assert!(size != 0, "invalid size");
+
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub Option<Item>);
+}
+
+impl BlockLogic for LandingPadBlock {
+ impl_block!();
+
+ fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ if config < 0 || config > i32::from(u16::MAX) {
+ return Err(DataConvertError::Custom(Box::new(ItemConvertError(config))));
+ }
+ Ok(DynData::Content(content::Type::Item, config as u16))
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(None))),
+ DynData::Content(content::Type::Item, id) => Ok(Some(Self::create_state(Some(
+ ItemDeserializeError::forward(Item::try_from(id))?,
+ )))),
+ DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
+ ItemDeserializeError::ContentType(have),
+ ))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Content,
+ }),
+ }
+ }
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ Ok(Self::get_state(state).map_or(DynData::Empty, |item| {
+ DynData::Content(content::Type::Item, item.into())
+ }))
+ }
+ fn draw(
+ &self,
+ _: &str,
+ state: Option<&State>,
+ _: Option<&crate::data::autotile::RenderingContext>,
+ _: super::Rotation,
+ scale: crate::data::renderer::Scale,
+ ) -> crate::utils::ImageHolder<4> {
+ let mut i: ImageHolder<4> = load!("landing-pad", scale);
+
+ match state.map(Self::get_state) {
+ Some(Some(item)) => {
+ let mut x = load!("landing-pad-bg", scale);
+ unsafe { i.overlay(x.tint(item.color())) };
+ }
+ _ => {}
+ }
+ i
+ }
+}
diff --git a/mindus/src/block/distribution.rs b/mindus/src/block/distribution.rs
index 4e867a9..bf3b77e 100644
--- a/mindus/src/block/distribution.rs
+++ b/mindus/src/block/distribution.rs
@@ -467,7 +467,7 @@ pub struct BridgeConvertError {
/// format;
/// - call [`read_item_bridge`]
/// - become [`read_item_buffer`]
-fn read_buffered_item_bridge(buff: &mut DataRead) -> Result<(), DataReadError> {
+fn read_buffered_item_bridge(_buff: &mut DataRead) -> Result<(), DataReadError> {
// read_item_bridge(buff)?;
// read_item_buffer(buff)
Ok(())
@@ -491,7 +491,7 @@ fn read_item_buffer(buff: &mut DataRead) -> Result<(), DataReadError> {
/// - moved: `bool`
fn read_item_bridge(buff: &mut DataRead) -> Result<(), DataReadError> {
buff.skip(8)?;
- let n = buff.read_i8()?;
+ let _n = buff.read_i8()?;
// buff.skip((n as usize * 4) + 1)
// bug?
Ok(())
diff --git a/mindus/src/block/mod.rs b/mindus/src/block/mod.rs
index b633873..88bfbeb 100644
--- a/mindus/src/block/mod.rs
+++ b/mindus/src/block/mod.rs
@@ -27,7 +27,7 @@ macro_rules! mods {
}
mods! {
- content defense distribution drills liquid logic payload power production turrets walls units
+ content defense distribution drills liquid logic payload power production turrets walls units campaign
}
pub mod ratios;
@@ -121,6 +121,7 @@ disp! {
LampBlock,
UnitCargoLoader,
DoorBlock,
+ LandingPadBlock,
}
pub trait Cast {
@@ -982,7 +983,7 @@ make_register! {
"basic-assembler-module" => AssemblerModule::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block
"unit-repair-tower" -> BasicBlock::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80));
"launch-pad" -> BasicBlock::new(3, true, cost!(Copper: 350, Lead: 200, Titanium: 150, Silicon: 140));
- "landing-pad" -> BasicBlock::new(4, true, cost!(Copper: 200, Graphite: 100, Titanium: 100));
+ "landing-pad" => LandingPadBlock::new(4, true, cost!(Copper: 200, Graphite: 100, Titanium: 100));
"advanced-launch-pad" -> BasicBlock::new(4, true, cost!(Copper: 350, Silicon: 250, Lead: 300, Titanium: 200));
"interplanetary-accelerator" -> BasicBlock::new(7, true, cost!(Copper: 16000, Silicon: 11000, Thorium: 13000, Titanium: 12000, SurgeAlloy: 6000, PhaseFabric: 5000));
"mechanical-drill" -> DrillBlock::new(2, true, cost!(Copper: 12));
diff --git a/mindus/src/block/ratios.rs b/mindus/src/block/ratios.rs
index 59b1eb0..ebaa51d 100644
--- a/mindus/src/block/ratios.rs
+++ b/mindus/src/block/ratios.rs
@@ -263,3 +263,4 @@ rats!(AssemblerBlock { none });
rats!(RepairTurret { none });
rats!(AssemblerModule { none });
rats!(TileableDisplay { none });
+rats!(LandingPadBlock { none });
diff --git a/mindus/src/data/map.rs b/mindus/src/data/map.rs
index 193149b..afd1497 100644
--- a/mindus/src/data/map.rs
+++ b/mindus/src/data/map.rs
@@ -865,7 +865,7 @@ impl MapReader {
#[cfg(debug_assertions)]
println!("reading {block:?} ");
- let revision = self.buff.read_i8()?;
+ let _revision = self.buff.read_i8()?;
let mut b = Build::new(block);
b.read(&mut self.buff)?;
// implementation not complete, skip remaining bytes (TODO finish impl)