From 9b77030896e49935f05cd09ae808415120e74863 Mon Sep 17 00:00:00 2001 From: Jonas Date: Wed, 23 Sep 2026 23:24:34 +0200 Subject: [PATCH] fix: Illigal and missing moves caluclated --- src/plugin2027/piece.rs | 2 +- src/plugin2027/utils/game_rule_logic.rs | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/plugin2027/piece.rs b/src/plugin2027/piece.rs index 5bdc76a..5283892 100644 --- a/src/plugin2027/piece.rs +++ b/src/plugin2027/piece.rs @@ -38,8 +38,8 @@ impl Piece { pub fn shape(&self) -> HashSet { self.kind .coordinates() - .flip(self.is_flipped) .rotate(self.rotation) + .flip(self.is_flipped) } /// Die tatsächlichen Koordinaten, die der Stein am Ende auf dem Feld einnimmt. diff --git a/src/plugin2027/utils/game_rule_logic.rs b/src/plugin2027/utils/game_rule_logic.rs index 2f4678f..6c305d1 100644 --- a/src/plugin2027/utils/game_rule_logic.rs +++ b/src/plugin2027/utils/game_rule_logic.rs @@ -305,15 +305,12 @@ impl GameRuleLogic { let color = game_state.current_color(); for field in &valid_fields { - for (_variant_shape, rotation, is_flipped) in shape.variants() { - let area = shape.transform(rotation, is_flipped).area(); - for x in (field.x - area.delta_x)..=field.x { - for y in (field.y - area.delta_y)..=field.y { - let position = Coordinate::new(x, y); - let piece = Piece::new(color, shape, rotation, is_flipped, position); - if Self::is_valid_set_move(game_state, &piece) { - moves.insert(piece); - } + for (variant_coordinates, rotation, is_flipped) in shape.variants() { + for anchor in &variant_coordinates { + let position = Coordinate::new(field.x - anchor.x, field.y - anchor.y); + let piece = Piece::new(color, shape, rotation, is_flipped, position); + if Self::is_valid_set_move(game_state, &piece) { + moves.insert(piece); } } }