Allow shift location action to move the whole row.
authorSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 22:33:58 +0000 (00:33 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 22:34:07 +0000 (00:34 +0200)
naja/actions.py
naja/gameboard.py

index 0baba3a34acbeb6158d04ff36d94abf8d6a87f7f..431b126829a1d48b401fdb5e3e288c5406a9a0dc 100644 (file)
@@ -293,7 +293,9 @@ class ShiftLocations(LocationAction):
 
     def perform_action(self, board, location):
         sound.play_sound('grind.ogg')
-        board.shift_locations(self.data['direction'])
+        board.shift_locations(
+            self.data['direction'],
+            self.data.get('skip_player', False))
 
 
 class RotateLocations(LocationAction):
index 66c651936099520c0d163786881b7422974fac94..f17a129742fb810cc91055cc24d68a2efcfb065e 100644 (file)
@@ -206,13 +206,13 @@ class GameBoard(object):
                     del choices[key]
         return choice(choices.values())
 
-    def shift_location_row(self, change, is_vertical):
+    def shift_location_row(self, change, is_vertical, skip_player=True):
         px, py = self.player.position
         shifted_locations = {}
         mkpos = lambda i: (px, i) if is_vertical else (i, py)
 
         for i in range(5):
-            if (px, py) == mkpos(i):
+            if skip_player and (px, py) == mkpos(i):
                 continue
             new_i = (i + change) % 5
             if (px, py) == mkpos(new_i):
@@ -221,15 +221,19 @@ class GameBoard(object):
 
         self.board_locations.update(shifted_locations)
 
-    def shift_locations(self, direction):
+    def shift_locations(self, direction, skip_player=True):
         if BITS[direction] == BITS.NORTH:
-            self.shift_location_row(-1, is_vertical=True)
+            self.shift_location_row(-1, is_vertical=True,
+                                    skip_player=skip_player)
         elif BITS[direction] == BITS.SOUTH:
-            self.shift_location_row(1, is_vertical=True)
+            self.shift_location_row(1, is_vertical=True,
+                                    skip_player=skip_player)
         elif BITS[direction] == BITS.EAST:
-            self.shift_location_row(1, is_vertical=False)
+            self.shift_location_row(1, is_vertical=False,
+                                    skip_player=skip_player)
         elif BITS[direction] == BITS.WEST:
-            self.shift_location_row(-1, is_vertical=False)
+            self.shift_location_row(-1, is_vertical=False,
+                                    skip_player=skip_player)
 
     def rotate_locations(self, direction):
         px, py = self.player.position