Unnamed repository; edit this file 'description' to name the repository.
landing pad config
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 Binary files differindex 5a534cb..4749954 100644 --- a/mindus/assets/blocks/autotiles/metal-wall-1-33.png +++ b/mindus/assets/blocks/autotiles/metal-wall-1-33.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-36.png b/mindus/assets/blocks/autotiles/metal-wall-1-36.png Binary files differindex 8c6515e..f834622 100644 --- a/mindus/assets/blocks/autotiles/metal-wall-1-36.png +++ b/mindus/assets/blocks/autotiles/metal-wall-1-36.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-38.png b/mindus/assets/blocks/autotiles/metal-wall-1-38.png Binary files differindex de93d55..a11902c 100644 --- a/mindus/assets/blocks/autotiles/metal-wall-1-38.png +++ b/mindus/assets/blocks/autotiles/metal-wall-1-38.png diff --git a/mindus/assets/blocks/campaign/landing-pad-bg.png b/mindus/assets/blocks/campaign/landing-pad-bg.png Binary files differnew file mode 100644 index 0000000..f02ccb8 --- /dev/null +++ b/mindus/assets/blocks/campaign/landing-pad-bg.png diff --git a/mindus/assets/blocks/environment/pur-bush.png b/mindus/assets/blocks/environment/pur-bush.png Binary files differindex 9fe4180..32c7201 100644 --- a/mindus/assets/blocks/environment/pur-bush.png +++ b/mindus/assets/blocks/environment/pur-bush.png diff --git a/mindus/assets/blocks/environment/single/metal-wall-1.png b/mindus/assets/blocks/environment/single/metal-wall-1.png Binary files differindex 95adac5..1a7fadb 100644 --- a/mindus/assets/blocks/environment/single/metal-wall-1.png +++ b/mindus/assets/blocks/environment/single/metal-wall-1.png diff --git a/mindus/assets/blocks/environment/single/metal-wall-2.png b/mindus/assets/blocks/environment/single/metal-wall-2.png Binary files differindex 2f0db5b..a913a43 100644 --- a/mindus/assets/blocks/environment/single/metal-wall-2.png +++ b/mindus/assets/blocks/environment/single/metal-wall-2.png diff --git a/mindus/assets/blocks/environment/single/metal-wall-3.png b/mindus/assets/blocks/environment/single/metal-wall-3.png Binary files differindex 9806760..703fcd9 100644 --- a/mindus/assets/blocks/environment/single/metal-wall-3.png +++ b/mindus/assets/blocks/environment/single/metal-wall-3.png diff --git a/mindus/assets/blocks/environment/yellowcoral.png b/mindus/assets/blocks/environment/yellowcoral.png Binary files differindex 5a96fe2..bbc76b4 100644 --- a/mindus/assets/blocks/environment/yellowcoral.png +++ b/mindus/assets/blocks/environment/yellowcoral.png diff --git a/mindus/assets/blocks/logic/large-canvas.png b/mindus/assets/blocks/logic/large-canvas.png Binary files differindex ab09c2a..36c0312 100644 --- a/mindus/assets/blocks/logic/large-canvas.png +++ b/mindus/assets/blocks/logic/large-canvas.png diff --git a/mindus/assets/blocks/turrets/salvo.png b/mindus/assets/blocks/turrets/salvo.png Binary files differindex d725e4e..3efea07 100644 --- a/mindus/assets/blocks/turrets/salvo.png +++ b/mindus/assets/blocks/turrets/salvo.png 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) |