def tick(self): t = time.time() if self.first: self.first = False self.ticks = 0 self.start_time = t self.time = t self.eventfunc(bee.event("start")) self.eventfunc(bee.event("tick")) self.time = t self.ticks += 1
def tick(self): current_time = time.time() if self.first: self.first = False self.ticks = 0 self.start_time = current_time self.time = current_time self.eventfunc(bee.event("start")) while current_time - self.start_time > self.interval * self.ticks: self.eventfunc(bee.event("tick")) self.time = current_time self.ticks += 1 current_time = time.time()
def run(self): import bge try: self.finished = False for f in self.startupfunctions: f() while not self.doexit: self.pacemaker.tick() self.on_tick() bge.logic.NextFrame() # time.sleep(0.005) comnr = 0 while comnr < len(self._commands): com = self._commands[comnr] comnr += 1 for e in self._eventreaders: e(event("command", com)) self.pacemaker.tick() self.on_tick() bge.logic.NextFrame() #time.sleep(0.005) self._commands = [] finally: self.cleanup()
def get_mousebutton_event(self, event): canvasx, canvasy = self.canvas_size() x, y = event[1] for areaname in reversed(self.areanames): area = self.areas[areaname] a = area.to_std(canvasx, canvasy) px = 2 * (x - a.x) / a.sizex - 1 py = 2 * (y - a.y) / a.sizey - 1 if px < -1 or px > 1: continue if py < -1 or py > 1: continue e = bee.event("mousearea", areaname, event[0], (px, py)) self.send_event(e) break
def send_input(self): import bge keys = bge.logic.keyboard.events pressed = [k for k in keys if keys[k] == bge.logic.KX_INPUT_JUST_ACTIVATED] for key in pressed: if key not in trans: continue if key in self.just_pressed: continue self.just_pressed.add(key) if key in self.just_released: self.just_released.remove(key) keyboard_event = event("keyboard", "keypressed", trans[key]) self.broadcast_event(keyboard_event) released = [k for k in keys if keys[k] == bge.logic.KX_INPUT_JUST_RELEASED] for key in released: if key not in trans: continue if key in self.just_released: continue self.just_released.add(key) if key in self.just_pressed: self.just_pressed.remove(key) keyboard_event = event("keyboard", "keyreleased", trans[key]) self.broadcast_event(keyboard_event) buttons = bge.logic.mouse.events but = { "LEFT": buttons[bge.logic.KX_MOUSE_BUT_LEFT], "MIDDLE": buttons[bge.logic.KX_MOUSE_BUT_MIDDLE], "RIGHT": buttons[bge.logic.KX_MOUSE_BUT_RIGHT] } for button in but: v = but[button] if v == bge.logic.KX_INPUT_JUST_ACTIVATED: if button in self.just_pressed: continue self.just_pressed.add(button) if button in self.just_released: self.just_released.remove(button) keyboard_event = event("mouse", "buttonpressed", button, self.get_mouse()) self.broadcast_event(keyboard_event) elif v == bge.logic.KX_INPUT_JUST_RELEASED: if button in self.just_released: continue self.just_released.add(button) if button in self.just_pressed: self.just_pressed.remove(button) keyboard_event = event("mouse", "buttonreleased", button, self.get_mouse()) self.broadcast_event(keyboard_event) # Mouse movement x, y = self.get_mouse() if x != self._last_x or y != self._last_y: keyboard_event = event("mouse", "move", (x, y)) self.broadcast_event(keyboard_event) self._last_x, self._last_y = x, y
def on_exit(self): self.eventfunc(bee.event("stop"))
def send_input(self): import bge keys = bge.logic.keyboard.events pressed = [ k for k in keys if keys[k] == bge.logic.KX_INPUT_JUST_ACTIVATED ] for key in pressed: if key not in trans: continue if key in self.just_pressed: continue self.just_pressed.add(key) if key in self.just_released: self.just_released.remove(key) keyboard_event = event("keyboard", "keypressed", trans[key]) self.broadcast_event(keyboard_event) released = [ k for k in keys if keys[k] == bge.logic.KX_INPUT_JUST_RELEASED ] for key in released: if key not in trans: continue if key in self.just_released: continue self.just_released.add(key) if key in self.just_pressed: self.just_pressed.remove(key) keyboard_event = event("keyboard", "keyreleased", trans[key]) self.broadcast_event(keyboard_event) buttons = bge.logic.mouse.events but = { "LEFT": buttons[bge.logic.KX_MOUSE_BUT_LEFT], "MIDDLE": buttons[bge.logic.KX_MOUSE_BUT_MIDDLE], "RIGHT": buttons[bge.logic.KX_MOUSE_BUT_RIGHT] } for button in but: v = but[button] if v == bge.logic.KX_INPUT_JUST_ACTIVATED: if button in self.just_pressed: continue self.just_pressed.add(button) if button in self.just_released: self.just_released.remove(button) keyboard_event = event("mouse", "buttonpressed", button, self.get_mouse()) self.broadcast_event(keyboard_event) elif v == bge.logic.KX_INPUT_JUST_RELEASED: if button in self.just_released: continue self.just_released.add(button) if button in self.just_pressed: self.just_pressed.remove(button) keyboard_event = event("mouse", "buttonreleased", button, self.get_mouse()) self.broadcast_event(keyboard_event) # Mouse movement x, y = self.get_mouse() if x != self._last_x or y != self._last_y: keyboard_event = event("mouse", "move", (x, y)) self.broadcast_event(keyboard_event) self._last_x, self._last_y = x, y
def send_input(self): self.eventfunc(bee.event("send_input"))
def process_key(self, key): if key not in ascii_to_keycode: return keycode = ascii_to_keycode[key] e = event("keyboard", "keypressed", keycode) for t in self.targets: t.add_event(e)
def mousewheel(self, updown): e = event("mouse", "wheel", updown, self.get_mouse()) for t in self.targets: t.add_event(e)
def mousebuttonreleased(self, button): e = event("mouse", "buttonreleased", button, self.get_mouse()) for t in self.targets: t.add_event(e)
def keyreleased(self, key): e = event("keyboard", "keyreleased", key) for t in self.targets: t.add_event(e)