X-Git-Url: http://git.tomasm.cz/imago.git/blobdiff_plain/b002067a40eafa06b3bf2a19e863232aee1a6006..2b3e40c0c1702b8519531cd76df28c6ec207ac33:/timer.py?ds=inline diff --git a/timer.py b/timer.py index 916d578..bc8a5c3 100755 --- a/timer.py +++ b/timer.py @@ -6,27 +6,44 @@ import os import sys import time import argparse +import subprocess import pygame class Timer: - def __init__(self, main_time): + def __init__(self, main_time, byop, byot): self._last = 0 self._elapsed = 0. self._main_t = main_time + self.byost = "main time" + self._byop = byop + 1 + self._byot = byot + self._byo = False def get_time(self): - if self._last > 0: - r_time = main_time - (time.time() - self._last + self._elapsed) + if self._last > 0: # when running: + r_time = self._main_t - (time.time() - self._last + self._elapsed) if (r_time - int(r_time)) < 0.75: sep = ":" else: sep = " " - else: - r_time = main_time - self._elapsed + else: # not running: + if self._byo and self._byop > 0: + self._elapsed = 0 + r_time = self._main_t - self._elapsed sep = ":" if r_time < 0: - r_time = 0 + self._byo = True + self._main_t = self._byot + self._byop -= 1 + if self._byop > 0: + self._elapsed = 0 + self._last = time.time() + self.byost = "(" + str(self._byop) + ")" + return self.get_time() + else: + r_time = 0 + self.byost = "lost on time" return "{0:0>2}".format(int(r_time / 60)) + sep + "{0:0>2}".format(int(r_time % 60)) def start(self): @@ -43,37 +60,60 @@ class Timer: return False parser = argparse.ArgumentParser(description=__doc__) -parser.add_argument('-m', type=int, default=45, - help="main time in minutes") +parser.add_argument('-m', type=int, default=10, + help="main time in minutes (default is 10)") +parser.add_argument('-b', type=int, nargs=2, default=[5, 20], + help="japanese byoyomi: number of periods, period length in" + " seconds (default is 5 periods, 20 seconds)") +parser.add_argument('-c', '--camera', dest='cam', action='store_true', + help="camera on") +parser.add_argument('-d', type=int, default=0, + help="video device id") +parser.add_argument('-r', type=int, nargs=2, default=[640, 480], + help="set camera resolution") args = parser.parse_args() pygame.init() -pygame.display.set_mode((600, 100)) +pygame.display.set_mode((600, 130)) pygame.display.set_caption("Go timer") screen = pygame.display.get_surface() clock = pygame.time.Clock() font = pygame.font.Font(pygame.font.match_font('monospace'), 80) +font2 = pygame.font.Font(None, 25) done = False first = True main_time = args.m * 60 -timers = (Timer(main_time), Timer(main_time)) +timers = (Timer(main_time, args.b[0], args.b[1]), Timer(main_time, args.b[0], args.b[1])) -while not done: +if args.cam: + capture = subprocess.Popen(['python', 'capture.py', '-c', '-d', str(args.d), '-r', + str(args.r[0]), + str(args.r[1])], stdin=subprocess.PIPE) +last = 0 +while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True elif event.type == pygame.KEYDOWN: + if time.time() - last < 0.7: + continue + last = time.time() if first: timers[0].start() first = False + if args.cam: + print >> capture.stdin, "stop" + print >> capture.stdin, "take" continue + if args.cam: + print >> capture.stdin, "take" for timer in timers: if timer.is_running(): timer.stop() @@ -85,5 +125,12 @@ while not done: screen.blit(text1, [10, 10]) text2 = font.render(timers[1].get_time(), True, [128, 255, 128]) screen.blit(text2, [300, 10]) + text3 = font2.render(timers[0].byost, True, [128, 255, 128]) + screen.blit(text3, [10, 90]) + text4 = font2.render(timers[1].byost, True, [128, 255, 128]) + screen.blit(text4, [300, 90]) pygame.display.flip() clock.tick(15) + +if args.cam: + print >> capture.stdin, "exit"