From 67aa5e0c790470d01c81a39a915dc745a31f1fca Mon Sep 17 00:00:00 2001 From: Kyle Florence Date: Thu, 26 Sep 2024 18:27:28 -0700 Subject: [PATCH] Fix move actions not locking to tiles. Fixes #28 (#29) There were two problems here. The currently selected tile was changing before the modifier was invoked and it was referencing the wrong tile. This is a problem for move actions because the a new tile is selected during modification (the 'to' tile). --- src/components/modifier.js | 2 +- src/components/modifiers/move.js | 5 ++--- src/components/modifiers/swap.js | 2 ++ src/components/puzzle.js | 4 ++++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components/modifier.js b/src/components/modifier.js index 13141de..2be987f 100644 --- a/src/components/modifier.js +++ b/src/components/modifier.js @@ -97,7 +97,7 @@ export class Modifier extends Stateful { } dispatchEvent (event, detail) { - emitEvent(event, Object.assign({}, detail || {}, { modifier: this, tile: this.tile })) + emitEvent(event, Object.assign({ tile: this.tile }, detail || {}, { modifier: this })) } equals (other) { diff --git a/src/components/modifiers/move.js b/src/components/modifiers/move.js index 0fd7be1..5defcb2 100644 --- a/src/components/modifiers/move.js +++ b/src/components/modifiers/move.js @@ -41,6 +41,8 @@ export class Move extends Modifier { items.forEach((item) => item.move(tile)) return { moved: [Move.data(this.tile, tile, items)], + selectedTile: tile, + tile: this.tile, tiles: [this.tile, tile] } } @@ -60,9 +62,6 @@ export class Move extends Modifier { if (tile) { const data = this.moveItems(tile) - - puzzle.updateSelectedTile(tile) - this.dispatchEvent(Modifier.Events.Invoked, data) } diff --git a/src/components/modifiers/swap.js b/src/components/modifiers/swap.js index 3f2a0c7..f27b075 100644 --- a/src/components/modifiers/swap.js +++ b/src/components/modifiers/swap.js @@ -15,6 +15,8 @@ export class Swap extends Move { return { moved: [Move.data(this.tile, tile, fromItems), Move.data(tile, this.tile, toItems)], + selectedTile: tile, + tile: this.tile, tiles: [this.tile, tile] } } diff --git a/src/components/puzzle.js b/src/components/puzzle.js index 9e1a925..c05bbef 100644 --- a/src/components/puzzle.js +++ b/src/components/puzzle.js @@ -353,6 +353,10 @@ export class Puzzle { .forEach((other) => other.update({ disabled: true })) } + if (event.detail.selectedTile) { + this.updateSelectedTile(event.detail.selectedTile) + } + this.addMove() this.updateState()