mindustry logic execution, map- and schematic- parsing and rendering
fix non square build blocks not drawing the floor beneath them
| -rw-r--r-- | src/data/map.rs | 22 | ||||
| -rw-r--r-- | src/data/renderer.rs | 19 |
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) }, |