
import time, select, sys

class InputTimer:

	keys = { ord('-'): 1.1, ord('+'): 0.9 }

	def __init__( s, step ):
		s.step = step
		s.nextevent = time.time() + step

	def adjuststep( s, factor ):
		s.step = s.step * factor

	def wait_event( s, inphandler, idlehandler ):
		timeout = max( s.nextevent - time.time(), 0 )
		rd, wd, ed = select.select( [ sys.stdin ], [], [], timeout )
		if rd: inphandler()
		if s.nextevent < time.time():
			idlehandler()
			s.nextevent = s.nextevent + s.step

	def eventloop( s, inphandler, idlehandler, updatehandler ):
		while True:
			s.wait_event( inphandler, idlehandler )
			updatehandler()

	def handle_keypress( s, key ):
		try: factor = s.keys[key]
		except KeyError: return
		s.adjuststep( factor )

