mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/distribution.rs')
| -rw-r--r-- | src/block/distribution.rs | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/src/block/distribution.rs b/src/block/distribution.rs index 06ce5b8..aaa9528 100644 --- a/src/block/distribution.rs +++ b/src/block/distribution.rs @@ -8,10 +8,7 @@ use crate::item; make_simple!( ConveyorBlock, - |_, name, _, ctx: Option<&RenderingContext>, rot: Rotation| { - let ctx = ctx.unwrap(); // we set want_context to true - tile(ctx, name, rot) - }, + |_, name, _, ctx: Option<&RenderingContext>, rot, s| tile(ctx.unwrap(), name, rot, s), |_, _, _, buff: &mut DataRead| { // format: // - amount: `i32` @@ -31,10 +28,7 @@ make_simple!( make_simple!( DuctBlock, - |_, name, _, ctx: Option<&RenderingContext>, rot| { - let ctx = ctx.unwrap(); - tile(ctx, name, rot) - }, + |_, name, _, ctx: Option<&RenderingContext>, rot, s| tile(ctx.unwrap(), name, rot, s), |_, _, _, buff: &mut DataRead| { // format: // - rec_dir: `i8` @@ -43,10 +37,10 @@ make_simple!( true ); -make_simple!(JunctionBlock => |_, _, _, buff: &mut DataRead| { read_directional_item_buffer(buff) }); -make_simple!(SimpleDuctBlock, |_, name, _, _, rot: Rotation| { - let mut base = load("duct-base"); - let mut top = load(name); +make_simple!(JunctionBlock => |_, _, _, buff| { read_directional_item_buffer(buff) }); +make_simple!(SimpleDuctBlock, |_, name, _, _, rot: Rotation, s| { + let mut base = load("duct-base", s); + let mut top = load(name, s); top.rotate(rot.rotated(false).count()); base.overlay(&top); base @@ -58,10 +52,11 @@ fn draw_stack( _: Option<&State>, ctx: Option<&RenderingContext>, rot: Rotation, + s: Scale, ) -> ImageHolder { let ctx = ctx.unwrap(); let mask = mask(ctx, rot, name); - let edge = load(&format!("{name}-edge")); + let edge = load(&format!("{name}-edge"), s); let edgify = |skip, to: &mut RgbaImage| { for i in 0..4 { if i == skip { @@ -72,7 +67,7 @@ fn draw_stack( to.overlay(&edge); } }; - let gimme = |n: u8| load(&format!("{name}-{n}")); + let gimme = |n: u8| load(&format!("{name}-{n}"), s); let empty = ctx.cross[rot.count() as usize].map_or(true, |(v, _)| v.name != name); // mindustry says fuck this and just draws the arrow convs in schems but im better than that @@ -220,16 +215,20 @@ impl BlockLogic for ItemBlock { state: Option<&State>, _: Option<&RenderingContext>, rot: Rotation, + s: Scale, ) -> ImageHolder { - let mut p = load(name); + let mut p = load(name, s); if let Some(state) = state { - if let Some(s) = Self::get_state(state) { - let mut top = load(match name { - "unit-cargo-unload-point" => "unit-cargo-unload-point-top", - "unloader" => "unloader-center", - _ => "center", - }); - p.overlay(top.tint(s.color())); + if let Some(item) = Self::get_state(state) { + let mut top = load( + match name { + "unit-cargo-unload-point" => "unit-cargo-unload-point-top", + "unloader" => "unloader-center", + _ => "center", + }, + s, + ); + p.overlay(top.tint(item.color())); return p; } } @@ -237,20 +236,20 @@ impl BlockLogic for ItemBlock { return p; } if name == "duct-router" { - let mut arrow = load("top"); + let mut arrow = load("top", s); arrow.rotate(rot.rotated(false).count()); p.overlay(&arrow); p } else if name == "duct-unloader" { - let mut top = load("duct-unloader-top"); + let mut top = load("duct-unloader-top", s); top.rotate(rot.rotated(false).count()); p.overlay(&top); - let mut arrow = load("top"); + let mut arrow = load("top", s); arrow.rotate(rot.rotated(false).count()); p.overlay(&arrow); p } else { - let mut null = load("cross-full"); + let mut null = load("cross-full", s); null.overlay(&p); null } @@ -455,15 +454,15 @@ impl BlockLogic for BridgeBlock { Ok(()) } - fn draw( &self, name: &str, _: Option<&State>, _: Option<&RenderingContext>, _: Rotation, + s: Scale, ) -> ImageHolder { - read(name, self.size) + read(name, self.size, s) } } |