ya2 · news · projects · code · about

first commit
[pmachines.git] / lib / engine / pause.py
1 from direct.gui.DirectFrame import DirectFrame
2 from lib.gameobject import GuiColleague, LogicColleague, GameObject, \
3 Colleague
4 from lib.lib.p3d.pause import P3dPause
5 LibPause = P3dPause
6
7
8 class PauseGui(GuiColleague):
9
10 def __init__(self, mediator):
11 GuiColleague.__init__(self, mediator)
12 self.pause_frm = None
13
14 def toggle(self, show_frm=True):
15 if not self.mediator.logic._pause.paused:
16 #TODO: don't access protected members
17 if show_frm:
18 self.pause_frm = DirectFrame(frameColor=(.3, .3, .3, .7),
19 frameSize=(-1.8, 1.8, -1, 1))
20 else:
21 if self.pause_frm: self.pause_frm.destroy()
22
23 def destroy(self):
24 if self.pause_frm: self.pause_frm = self.pause_frm.destroy()
25 GuiColleague.destroy(self)
26
27
28 class PauseLogic(LogicColleague):
29
30 def __init__(self, mediator):
31 LogicColleague.__init__(self, mediator)
32 self._pause = LibPause()
33
34 def remove_task(self, tsk):
35 self._pause.remove_task(tsk)
36
37 def pause(self):
38 self.notify('on_pause')
39 return self._pause.pause()
40
41 def resume(self):
42 self.notify('on_resume')
43 return self._pause.resume()
44
45 def toggle(self, show_frm=True):
46 self.mediator.gui.toggle(show_frm)
47 (self.resume if self._pause.paused else self.pause)()
48
49 def destroy(self):
50 self._pause.destroy()
51 LogicColleague.destroy(self)
52
53
54 class PauseFacade:
55
56 @property
57 def paused(self):
58 return self.logic._pause.paused
59 #TODO: don't access protected members
60
61
62 class PauseMgr(GameObject, Colleague, PauseFacade):
63
64 def __init__(self, mediator):
65 GameObject.__init__(self)
66 Colleague.__init__(self, mediator)
67 self.gui = PauseGui(self)
68 self.logic = PauseLogic(self)
69
70 def remove_task(self, tsk):
71 return self.logic.remove_task(tsk)
72
73 def destroy(self):
74 self.gui = self.gui.destroy()
75 self.logic = self.logic.destroy()
76 GameObject.destroy(self)
77 Colleague.destroy(self)