/
HangarDog.py
109 lines (97 loc) · 3.77 KB
/
HangarDog.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Python bytecode 2.7 (decompiled from Python 2.7)
# Embedded file name: scripts/client/HangarDog.py
import BigWorld
import AnimationSequence
from ClientSelectableObject import ClientSelectableObject
from vehicle_systems.stricted_loading import makeCallbackWeak
from gui.shared import g_eventBus, EVENT_BUS_SCOPE, events
_INACTIVE_STATES = {'StartEmptyNode',
'Reveal01',
'RunAway01',
'Sleep Node0',
'bowlClick',
'Drinking01'}
_READY_FOR_CLICK_STATES = {'Idle01',
'LyingIdle01',
'LyingIdle02',
'Watching01',
'Itching01'}
_READY_FOR_BOWL_CLICK_STATES = {'Idle01', 'Watching01', 'Itching01'}
class HangarDog(ClientSelectableObject):
def __init__(self):
super(HangarDog, self).__init__()
self.__animator = None
self.__checkAnimStatesCallbackID = None
self.__currState = None
self.__isReadyForClick = False
self.enable(False)
return
def _getCollisionModelsPrereqs(self):
if not self.collisionModel:
return super(HangarDog, self)._getCollisionModelsPrereqs()
collisionModels = ((0, self.collisionModel),)
return collisionModels
def onEnterWorld(self, prereqs):
super(HangarDog, self).onEnterWorld(prereqs)
if self.animation:
self.__createAnimation(self.animation)
g_eventBus.addListener(events.HangarDogEvent.ON_BOWL_CLICKED, self.__onBowlClicked, scope=EVENT_BUS_SCOPE.LOBBY)
def onLeaveWorld(self):
super(HangarDog, self).onLeaveWorld()
g_eventBus.removeListener(events.HangarDogEvent.ON_BOWL_CLICKED, self.__onBowlClicked, scope=EVENT_BUS_SCOPE.LOBBY)
if self.__checkAnimStatesCallbackID is not None:
BigWorld.cancelCallback(self.__checkAnimStatesCallbackID)
self.__checkAnimStatesCallbackID = None
if self.__animator is not None:
self.__animator.stop()
self.__animator = None
return
def onMouseDown(self):
if not self.__isReadyForClick:
return
elif not self.enabled:
return
elif self.__animator is None:
return
else:
self.__animator.setTrigger('Click')
self.__isReadyForClick = False
return
def __createAnimation(self, resourceName):
loader = AnimationSequence.Loader(resourceName, self.spaceID)
BigWorld.loadResourceListBG((loader,), makeCallbackWeak(self.__onAnimatorLoaded, resourceName))
def __onAnimatorLoaded(self, resourceName, resourceList):
self.__animator = resourceList[resourceName]
self.__animator.bindTo(AnimationSequence.ModelWrapperContainer(self.model, self.spaceID))
self.__animator.start()
self.__checkAnimStatesCallbackID = BigWorld.callback(0.0, self.__tick)
def __tick(self):
self.__checkAnimStatesCallbackID = None
self.__checkAnimationState()
self.__checkAnimStatesCallbackID = BigWorld.callback(0.0, self.__tick)
return
def __checkAnimationState(self):
state = self.__animator.getCurrNodeName()
if self.__currState != state:
self.__currState = state
self.__onStateChanged(state)
def __onStateChanged(self, newState):
if newState in _INACTIVE_STATES:
self.enable(False)
else:
self.enable(True)
if newState in _READY_FOR_CLICK_STATES:
self.__isReadyForClick = True
def __onBowlClicked(self, _):
if not self.__isReadyForClick:
return
elif not self.enabled:
return
elif self.__animator is None:
return
elif self.__currState not in _READY_FOR_BOWL_CLICK_STATES:
return
else:
self.__animator.setTrigger('BowlClick')
self.__isReadyForClick = False
return