class FrameState(object): """ processes client events to present state information """ def __init__(self, previous=None): self.mouse0down = False self.mouse1down = False self.mouse2down = False self.mouse0clicks = 0 self.mouse1clicks = 0 self.mouse2clicks = 0 self.keysdown = {} # use as list, values are always None if previous: self.__dict__.update(previous.__dict__) # list of unknown commands, tuples (name, value) self.unknown = [] def process_event(self, event): type = event.type if event.type == event.KEYUP: self.keysdown.pop(event.value, None) elif event.type == event.KEYDOWN: self.keysdown[event.value] = None elif event.type == event.MOUSEDOWN: setattr(self, 'mouse%sdown' % (event.value,), True) clickattr = 'mouse%sclicks' % (event.value,) newvalue = getattr(self, clickattr) + 1 setattr(self, clickattr, newvalue) elif event.type == event.MOUSEUP: setattr(self, 'mouse%sdown' % (event.value,), False) else: self.unknown.append((event.command, event.value))