Mercurial > hg > tilerswift
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()