From 2a0483c1562e18e14fbb63276ca873640e24706d Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 5 Apr 2025 23:46:52 +0200 Subject: [PATCH 1/2] fix crash when completing level with a wide machine --- CHANGELOG.md | 2 ++ src/marble_engine/grid.rs | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 011b04a..3cdba8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ Game store page: https://crispypin.itch.io/marble-machinations ## [unreleased] +### fixed +- broken area calculation causing crash when completing a level with a machine wider than it is tall ## v0.3.0 - 2025-04-04 ### added diff --git a/src/marble_engine/grid.rs b/src/marble_engine/grid.rs index 1e0bc8d..63f2f64 100644 --- a/src/marble_engine/grid.rs +++ b/src/marble_engine/grid.rs @@ -124,9 +124,9 @@ impl Grid { } pub fn used_bounds_area(&self) -> usize { - let row_clear = |a, max, f: fn(usize, usize) -> (usize, usize)| { - for b in 0..max { - if !self.get_unchecked(f(a, b).into()).is_blank() { + let row_clear = |y| { + for x in 0..self.width { + if !self.get_unchecked((x, y).into()).is_blank() { return false; } } @@ -134,29 +134,37 @@ impl Grid { }; let mut height = self.height; for y in 0..self.height { - if row_clear(y, self.width, |y, x| (x, y)) { + if row_clear(y) { height -= 1; } else { break; } } for y in (0..self.height).rev() { - if row_clear(y, self.width, |y, x| (x, y)) { + if row_clear(y) { height -= 1; } else { break; } } + let col_clear = |x| { + for y in 0..self.height { + if !self.get_unchecked((x, y).into()).is_blank() { + return false; + } + } + true + }; let mut width = self.width; for x in 0..self.width { - if row_clear(x, self.height, |x, y| (x, y)) { + if col_clear(x) { width -= 1; } else { break; } } for x in (0..self.width).rev() { - if row_clear(x, self.width, |x, y| (x, y)) { + if col_clear(x) { width -= 1; } else { break; From 48b5b3f3c7b425453052cd357c9c0cba99e228c5 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 5 Apr 2025 23:51:56 +0200 Subject: [PATCH 2/2] bump version to 0.3.1 --- CHANGELOG.md | 2 ++ Cargo.lock | 4 ++-- Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cdba8a..17cb141 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ Game store page: https://crispypin.itch.io/marble-machinations ## [unreleased] + +## v0.3.1 - 2025-04-05 ### fixed - broken area calculation causing crash when completing a level with a machine wider than it is tall diff --git a/Cargo.lock b/Cargo.lock index d4c39b5..0481cd8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aho-corasick" @@ -213,7 +213,7 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "marble-machinations" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arboard", "raylib", diff --git a/Cargo.toml b/Cargo.toml index e184723..d7d32d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "marble-machinations" -version = "0.3.0" +version = "0.3.1" edition = "2021" default-run = "marble-machinations"