50dc5a1bc65ea259883ab593e5232377ddc0457a
1 from direct
.fsm
.FSM
import FSM
2 from direct
.showbase
.DirectObject
import DirectObject
3 from ya2
.patterns
.observer
import Subject
6 class Colleague(Subject
):
10 def __init__(self
, mediator
):
11 Subject
.__init
__(self
)
12 self
.mediator
= mediator
# refactor: remove it
19 class FsmColleague(FSM
, Colleague
):
21 def __init__(self
, mediator
):
22 FSM
.__init
__(self
, self
.__class
__.__name
__)
23 Colleague
.__init
__(self
, mediator
)
28 Colleague
.destroy(self
)
31 class EventColleague(Colleague
, DirectObject
):
35 Colleague
.destroy(self
)
38 class AudioColleague(Colleague
):
42 class AiColleague(Colleague
):
46 class GfxColleague(Colleague
):
50 class GuiColleague(Colleague
):
54 class LogicColleague(Colleague
):
56 def on_start(self
): pass
59 class PhysColleague(Colleague
):
65 def __init__(self
, tgt_obj
, init_lst
, end_cb
):
67 tgt_obj
.attach(self
.on_comp_blt
)
69 self
.completed
= [False for _
in init_lst
]
71 self
.__init
_lst
= init_lst
72 for idx
, _
in enumerate(init_lst
):
73 self
.__process
_lst
(tgt_obj
, idx
)
75 def __process_lst(self
, obj
, idx
):
76 if not self
.__init
_lst
[idx
]:
79 comp_info
= self
.__init
_lst
[idx
].pop(0)
80 attr_name
, cls
, arguments
= comp_info
81 self
.pending
[cls
.__name
__] = idx
82 setattr(obj
, attr_name
, cls(*arguments
))
84 def on_comp_blt(self
, obj
):
85 self
.__process
_lst
(obj
.mediator
, self
.pending
[obj
.__class
__.__name
__])
87 def end_lst(self
, idx
):
88 self
.completed
[idx
] = True
89 if all(self
.completed
):
95 self
.__obj
.detach(self
.on_comp_blt
)
96 self
.__obj
= self
.end_cb
= self
.__init
_lst
= None
99 class GameObject(Subject
):