mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/data/renderer.rs')
-rw-r--r--src/data/renderer.rs47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
index 7f280b3..cb6d88d 100644
--- a/src/data/renderer.rs
+++ b/src/data/renderer.rs
@@ -411,8 +411,13 @@ impl Renderable for Schematic<'_> {
impl Renderable for Map<'_> {
fn render(&self) -> RgbaImage {
load_zip();
- let mut floor = RgbaImage::new(self.width as u32 * 8, self.height as u32 * 8);
- let mut top = RgbaImage::new(self.width as u32 * 8, self.height as u32 * 8);
+ let scale = if self.width + self.height < 2000 {
+ 8
+ } else {
+ 4
+ };
+ let mut floor = RgbaImage::new(self.width as u32 * scale, self.height as u32 * scale);
+ let mut top = RgbaImage::new(self.width as u32 * scale, self.height as u32 * scale);
for (x, y, j, tile) in self.tiles.iter().enumerate().map(|(j, t)| {
(
(j % self.width),
@@ -425,9 +430,9 @@ impl Renderable for Map<'_> {
if tile.build().is_none() {
floor.overlay(
// SAFETY: [`load_raw`] forces nonzero image size
- unsafe { &tile.image(None).own().scale(8) },
- x as u32 * 8,
- y as u32 * 8,
+ unsafe { &tile.image(None).own().scale(scale) },
+ x as u32 * scale,
+ y as u32 * scale,
);
} else {
let s = if let Some(build) = &tile.build() {
@@ -456,9 +461,14 @@ impl Renderable for Map<'_> {
})();
top.overlay(
// SAFETY: tile.size can never be 0, and [`load_raw`] forces nonzero.
- unsafe { &tile.image(ctx.as_ref()).own().scale(tile.size() as u32 * 8) },
- x as u32 * 8,
- y as u32 * 8,
+ unsafe {
+ &tile
+ .image(ctx.as_ref())
+ .own()
+ .scale(tile.size() as u32 * scale)
+ },
+ x as u32 * scale,
+ y as u32 * scale,
);
}
}
@@ -475,19 +485,14 @@ fn all_blocks() {
let reg = crate::block::build_registry();
for t in 19..Type::WorldMessage as u16 {
let t = Type::try_from(t).unwrap();
- if matches!(
- t,
- // TODO canvas
- Type::Canvas
- | Type::Empty
- | Type::SlagCentrifuge
- | Type::HeatReactor
- | Type::LegacyMechPad
- | Type::LegacyUnitFactory
- | Type::LegacyUnitFactoryAir
- | Type::LegacyUnitFactoryGround
- | Type::CommandCenter
- ) {
+ if matches!(t, |Type::Empty| Type::SlagCentrifuge
+ | Type::HeatReactor
+ | Type::LegacyMechPad
+ | Type::LegacyUnitFactory
+ | Type::LegacyUnitFactoryAir
+ | Type::LegacyUnitFactoryGround
+ | Type::CommandCenter)
+ {
continue;
}