changeset 119:9c97adbb349c draft

NES: factor out byte_forward and byte_backward into general rotate_tile_data I'll need more that one-step rotations for doing/undoing byte rotation at save and load time.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 01 Oct 2019 09:13:08 -0400
parents 72c36fb13706
children 0c40b4e8270e
files nes.py
diffstat 1 files changed, 19 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/nes.py
+++ b/nes.py
@@ -58,22 +58,30 @@
         for tile in self.tiles:
             tile.clear_caches()
 
-    def byte_forward(self):
-        if self.initial_position == -8:
+    def rotate_tile_data(self, steps):
+        """
+        Rotates the tile data by given number of steps, either
+        positively or negatively. The maximum rotation in either
+        direction is 8 steps.
+        """
+
+        if steps > 0:
+            steps = min(8 - self.initial_position, steps)
+        elif steps < 0:
+            steps = max(-8 - self.initial_position, steps)
+
+        if steps == 0:
             return
 
-        x = self.tile_data.pop(0)
-        self.tile_data.append(x)
-        self.initial_position -= 1
+        self.tile_data[:] = self.tile_data[steps:] + self.tile_data[:steps]
+        self.initial_position += steps
+
+    def byte_forward(self):
+        self.rotate_tile_data(1)
         self.update_tiles()
 
     def byte_backward(self):
-        if self.initial_position == 8:
-            return
-
-        x = self.tile_data.pop(-1)
-        self.tile_data.insert(0, x)
-        self.initial_position += 1
+        self.rotate_tile_data(-1)
         self.update_tiles()