From 2b8ae2b1e120f7ee2b65f901b29d458c792840b8 Mon Sep 17 00:00:00 2001 From: Joe Anderson Date: Tue, 23 Feb 2016 10:33:34 -0800 Subject: merge input functions into ooPlay.get_input --- oo.py | 87 +++++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/oo.py b/oo.py index 32b0624..c8a6444 100644 --- a/oo.py +++ b/oo.py @@ -559,13 +559,30 @@ class ooPlay: self.display_subroutine(x, y) self.screen.refresh() - def get_input(self, options): + pause_length = 80 + def get_input(self, options, delay=-1): """Waits for input to match an option, returns matched option. options must be an iterable of strings and ints. - Each character in each string and each int are checked against. - If the input matches any character in a string, - then the character is returned instead of the ordinal. + + Each character in each string and each int are checked against. + + If the input matches any character in a string, + then the character is returned instead of the ordinal. + + delay is in units of self.pause_length, + the standard delay per char for the class. + + delay may be an integer or float. + + If delay is negative, then input is blocking. + + If nonnegative, then input is non-blocking, + but keeps waiting if the input is not in options. + + Implementation is such that keypresses other than + those in options can shorten or lengthen the pause, + but the pause is capped at twice the intended delay. """ options = list(options) chars = [] @@ -576,43 +593,27 @@ class ooPlay: if type(option) is int: ords.append(option) breaks = list(map(ord, chars)) + ords - while True: - inp = self.screen.getch() - if inp in breaks: - break + + if delay == -1: + while True: + inp = self.screen.getch() + if inp in breaks: + break + else: + breaks.append(-1) + pause = int(self.pause_length * delay) + self.screen.timeout(pause) + while True: + inp = self.screen.getch() + if inp in breaks: break + pause //= 2 + self.screen.timeout(pause) + self.screen.timeout(-1) + if inp in map(ord, chars): return chr(inp) return inp - pause_length = 80 - def sleep(self, delay=1): - """Like most sleep functions, but can be escaped with spacebar. - - delay is in units of self.pause_length, - the standard delay per char for the class. - delay may be a positive integer or float. - - Implementation is such that keypresses other than spacebar - can shorten or lengthen the pause, - but the pause is capped at twice the intended delay. - - Returns True if spacebar was pressed. - """ - pause = int(self.pause_length * delay) - self.screen.timeout(pause) - while True: - inp = self.screen.getch() - if inp == -1: - space_pressed = False - break - if inp == ord(" "): - space_pressed = True - break - pause //= 2 - self.screen.timeout(pause) - self.screen.timeout(-1) - return space_pressed - def write(self, string=None, pause=None): """Write string to the bottom line. @@ -646,7 +647,8 @@ class ooPlay: centered_string = string.center(width, " ") self.screen.addstr(self.Y - 1, 0, centered_string, color) self.screen.refresh() - if pause: self.sleep(2*len(string)) + if pause: + if -1 != self.get_input(" ", delay=2*len(string)): return return # scrolling through a wider string @@ -654,12 +656,13 @@ class ooPlay: strings = [string[i:i + width] for i in range(len(string) - width + 1)] self.screen.addstr(self.Y - 1, 0, strings[0], color) self.screen.refresh() - if self.sleep(width): return + if -1 != self.get_input(" ", delay=width): return for s in strings: self.screen.addstr(self.Y - 1, 0, s, color) self.screen.refresh() - if self.sleep(): return - if pause: self.sleep(width) + if -1 != self.get_input(" ", delay=1): return + if pause: + if -1 != self.get_input(" ", delay=width): return def write_menu(self, string, controls=[]): """Writes string, waits for acceptable input, returns upper input. @@ -727,7 +730,7 @@ class ooPlay: """Write the help menu.""" self.write("use spacebar to skip or repeat a message") self.write("use the capital letter to make a selection") - self.write("use up to return to a previous menu") + self.write("use the up key to return to a previous menu") self.write("use return to exit the help menu") help_menu = \ ("Controls or Gameplay?", -- cgit v1.2.3-54-g00ecf