chiark / gitweb /
atoms.lisp: Fix undo/redo action sensitivity.
[atoms] / atoms.lisp
index 77329cf7841a466e1496bebb6d3e2d3023667cac..af9a21cf4245f1956937528efc75e5df3c5597fd 100644 (file)
@@ -362,8 +362,8 @@ (defmethod play-cell ((game atom-game) player i j)
          (unless (cell-played cell player-index)
            (return-from escape))
          (setf (player-state player) :playing)
-         (changed game :processing-move)
-         (perform-explosions game (list cell)))))))
+         (changed game :processing-move))
+       (perform-explosions game (list cell))))))
 
 (defmethod restart-game ((game atom-game) &key grid players)
   (game-cancel-timeout game)
@@ -417,7 +417,12 @@ (defmethod restore ((game atom-game) (snapshot atom-game-snapshot))
          do (restore player snap-player))
     (setf (game-player-index game) (slot-value snapshot 'player-index))
     (game-cancel-timeout game)
-    (changed game :refresh)))
+    (changed game :refresh)
+    (let ((critical-cells (loop for i below (array-total-size grid)
+                               for cell = (row-major-aref grid i)
+                               if (cell-critical-p cell)
+                               collect cell)))
+      (when critical-cells (perform-explosions game critical-cells)))))
 
 ;;;--------------------------------------------------------------------------
 ;;; The interactive board.
@@ -1005,7 +1010,7 @@ (defun update-undo-redo-sensitivity (window)
 (defmethod notify progn
     ((window atom-game-window) (game atom-game) aspect &key)
   (case aspect
-    ((:undo :redo :refresh :processing-move)
+    ((:undo :redo :refresh :start-turn)
      (update-undo-redo-sensitivity window))))
 
 (defun action-undo (window)