# HG changeset patch # User Emmanuel Gil Peyrot # Date 1344183582 -7200 # Node ID 6a63fd3deb76063289067cdfabbb88f6fc3afbe2 # Parent 6deab6ad8be8d42fbf538f1de9763fbe1f2324d9 Use an iterator to get the keystates from a replay. diff --git a/pytouhou/formats/t6rp.py b/pytouhou/formats/t6rp.py --- a/pytouhou/formats/t6rp.py +++ b/pytouhou/formats/t6rp.py @@ -43,6 +43,17 @@ class Level(object): self.keys = [] + def iter_keystates(self): + counter = 0 + previous = 0 + for frame, keystate, unknown in self.keys: + while frame >= counter: + yield previous + counter += 1 + previous = keystate + + + class T6RP(object): def __init__(self): self.version = 0x102 diff --git a/pytouhou/ui/gamerunner.py b/pytouhou/ui/gamerunner.py --- a/pytouhou/ui/gamerunner.py +++ b/pytouhou/ui/gamerunner.py @@ -68,8 +68,8 @@ class GameRunner(pyglet.window.Window, G self.keys = pyglet.window.key.KeyStateHandler() self.push_handlers(self.keys) else: - self.keys = 0 self.replay_level = replay.levels[game.stage-1] + self.keys = self.replay_level.iter_keystates() game.players[0].state.lives = self.replay_level.lives game.players[0].state.power = self.replay_level.power game.players[0].state.bombs = self.replay_level.bombs @@ -161,12 +161,10 @@ class GameRunner(pyglet.window.Window, G if self.keys[pyglet.window.key.LCTRL]: keystate |= 256 else: - keystate = 0 - for frame, _keystate, unknown in self.replay_level.keys: - if self.game.frame < frame: - break - else: - keystate = _keystate + try: + keystate = self.keys.next() + except StopIteration: + keystate = 0 if self.save_keystates is not None: self.save_keystates.append(keystate)