mindustry logic execution, map- and schematic- parsing and rendering
fix non square build blocks not drawing the floor beneath them
bendn 2023-07-23
parent a5ac792 · commit 4f6c57b
-rw-r--r--src/data/map.rs22
-rw-r--r--src/data/renderer.rs19
2 files changed, 21 insertions, 20 deletions
diff --git a/src/data/map.rs b/src/data/map.rs
index 6348477..18944a1 100644
--- a/src/data/map.rs
+++ b/src/data/map.rs
@@ -141,18 +141,20 @@ impl<'l> Tile<'l> {
1
}
- pub fn image(&self, context: Option<&RenderingContext>) -> ImageHolder {
+ pub fn floor_image(&self, context: Option<&RenderingContext>) -> ImageHolder {
+ let mut i = self.floor.image(None, context).own();
+ if let Some(ore) = self.ore {
+ i.overlay(ore.image(None, context).borrow(), 0, 0);
+ }
+ ImageHolder::from(i)
+ }
+
+ pub fn build_image(&self, context: Option<&RenderingContext>) -> ImageHolder {
// building covers floore
- let i = if let Some(b) = &self.build {
- b.image(context)
- } else {
- let mut i = self.floor.image(None, context).own();
- if let Some(ore) = self.ore {
- i.overlay(ore.image(None, context).borrow(), 0, 0);
- }
- ImageHolder::from(i)
+ let Some(b)= &self.build else {
+ unreachable!();
};
- i
+ b.image(context)
}
}
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
index c92f152..8672edf 100644
--- a/src/data/renderer.rs
+++ b/src/data/renderer.rs
@@ -237,15 +237,14 @@ impl Renderable for Map<'_> {
t,
)
}) {
- if tile.build().is_none() {
- floor.overlay(
- // SAFETY: [`load_raw`] forces nonzero image size
- unsafe { &tile.image(None).own().scale(scale) },
- x as u32 * scale,
- y as u32 * scale,
- );
- } else {
- let build = tile.build().unwrap();
+ // draw the floor first.
+ floor.overlay(
+ // SAFETY: [`load_raw`] forces nonzero image size
+ unsafe { &tile.floor_image(None).own().scale(scale) },
+ x as u32 * scale,
+ y as u32 * scale,
+ );
+ if let Some(build) = tile.build() {
let s = build.block.get_size();
let x = x - ((s - 1) / 2) as usize;
let y = y - (s / 2) as usize;
@@ -269,7 +268,7 @@ impl Renderable for Map<'_> {
// SAFETY: tile.size can never be 0, and [`load_raw`] forces nonzero.
unsafe {
&tile
- .image(ctx.as_ref())
+ .build_image(ctx.as_ref())
.own()
.scale(tile.size() as u32 * scale)
},