ya2 · news · projects · code · about

first commit
[pmachines.git] / lib / engine / event.py
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)