Commit | Line | Data |
---|---|---|
8ee66edd FC |
1 | from time import time |
2 | from logging import info | |
3 | from lib.gameobject import EventColleague | |
4 | from lib.engine.joystick import JoystickMgr | |
5 | ||
6 | ||
7 | class EngineEvent(EventColleague): | |
8 | ||
9 | def __init__(self, mediator, emulate_keyboard, functional_test): | |
10 | EventColleague.__init__(self, mediator) | |
11 | self.unpaused_time = 0 | |
12 | self._prev_time = time() | |
13 | self.eng.add_task(self.__on_frame) | |
14 | taskMgr.setupTaskChain('unpausable') | |
15 | mth = self.__on_frame_unpausable | |
16 | taskMgr.add(mth, 'unpausable', taskChain='unpausable') | |
17 | self.joystick_mgr = JoystickMgr(emulate_keyboard, functional_test) | |
18 | ||
19 | def __on_frame(self, task): # unused task | |
20 | self.notify('on_start_frame') | |
21 | self.notify('on_frame') | |
22 | self.notify('on_end_frame') | |
23 | return self.eng.lib.task_cont | |
24 | ||
25 | def __on_frame_unpausable(self, task): | |
26 | self.unpaused_time += time() - self._prev_time | |
27 | self._prev_time = time() | |
28 | try: | |
29 | self.notify('on_frame_unpausable') | |
30 | return task.cont | |
31 | except AttributeError: info("engine has been destroyed") | |
32 | ||
33 | @staticmethod | |
34 | def key2desc(keystr): | |
35 | if not keystr.startswith('raw-'): return keystr | |
36 | keystr = keystr[4:] | |
37 | kmap = base.win.get_keyboard_map() | |
38 | virt_key = kmap.get_mapped_button(keystr) | |
39 | return (kmap.get_mapped_button_label(keystr) or str(virt_key)).lower() | |
40 | ||
41 | @staticmethod | |
42 | def desc2key(desc): | |
43 | kmap = base.win.get_keyboard_map() | |
44 | for i in range(kmap.get_num_buttons()): | |
45 | if kmap.get_mapped_button_label(i).lower() == desc: | |
46 | return str(kmap.get_mapped_button(i)) | |
47 | return desc | |
48 | ||
49 | def destroy(self): | |
50 | self.joystick_mgr.destroy() | |
51 | EventColleague.destroy(self) |