Go to the documentation of this file.00001 '''
00002 Anoria (c) Gsk 2010
00003 '''
00004
00005 import BigWorld
00006 import math
00007
00008 import Anoria
00009 import AnGUI
00010
00011 import Stats
00012
00013
00014 from config.state import *
00015 from config.anim import *
00016 from config import event
00017
00018 class Actor(Stats.StatsManager):
00019
00020 def __init__(self):
00021 Stats.StatsManager.__init__(self, isServer=False)
00022 self.isPlayer = False
00023 self.target = None
00024 self.matchCaps = None
00025 self.matchCapsBak = None
00026
00027 self.states=[S_STANCE_IDLE, S_MOVE_NONE, S_COMBAT_OFF, S_ATTACK_OFF]
00028 self.stateChangeHandlers = ( \
00029 self.stanceStateChange,
00030 self.moveStateChange,
00031 self.combatStateChange,
00032 self.attackStateChange
00033 )
00034
00035
00036 self.eventProc = {}
00037 self.eventProc[event.YOU_DIED] = self.eventYouDied
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 def setTarget(self, entity):
00048 self.target = entity
00049
00050
00051
00052
00053
00054
00055 def buildActionTable(self):
00056 self.actionTable = {
00057 ACTION_IDLE: self.model.Idle,
00058 ACTION_RECOIL: self.model.Recoil,
00059 ACTION_DIE: self.model.Die,
00060 }
00061
00062
00063
00064 def setupActionMatcher(self):
00065 self.am = BigWorld.ActionMatcher( self )
00066 self.am.turnModelToEntity = True
00067 self.am.matcherCoupled = 1
00068 self.am.matchCaps = [MATCH_CAP_ON_LAND,]
00069 self.am.entityCollision = 1
00070 self.am.collisionRooted = 0
00071 self.am.footTwistSpeed = math.radians(270)
00072
00073
00074
00075 if self.am.owner != None: self.am.owner.delMotor( self.am )
00076 self.model.motors = ( self.am, )
00077
00078 def pushMatchCaps(self):
00079 self.matchCapsBak = self.matchCaps[:]
00080
00081 def popMatchCaps(self):
00082 if self.matchCapsBak != None:
00083 self.matchCaps = self.matchCapsBak[:]
00084 self.am.matchCaps = self.matchCaps
00085 self.matchCapsBak = None
00086
00087 def addMatchCap(self, cap):
00088
00089 self.matchCaps.append(cap)
00090 self.am.matchCaps = self.matchCaps
00091
00092 def delMatchCap(self, cap):
00093
00094 try:
00095 self.matchCaps.remove(cap)
00096 except:
00097 return
00098 self.am.matchCaps = self.matchCaps
00099
00100 def hasMatchCap(self, cap):
00101 if cap in self.matchCaps: return True
00102 return False
00103
00104
00105
00106
00107
00108 def stanceStateChange(self, newState):
00109 print "Actor.stanceStateChange() newState=%d" % (newState)
00110 self.states[STATE_STANCE] = newState
00111
00112 def moveStateChange(self, newState):
00113 print "Actor.moveStateChange() newState=%d" % (newState)
00114 self.states[STATE_MOVE] = newState
00115
00116 def combatStateChange(self, newState):
00117 print "Actor.combatStateChange() newState=%d" % (newState)
00118 self.states[STATE_COMBAT] = newState
00119
00120 def attackStateChange(self, newState):
00121 print "Actor.attackStateChange() newState=%d" % (newState)
00122 self.states[STATE_ATTACK] = newState
00123
00124
00125
00126
00127
00128
00129
00130 def set_healthPercent(self, old_hp):
00131
00132
00133 if AnGUI.service.targetHud.focusEntity == self or BigWorld.target() == self:
00134 AnGUI.service.targetHud.updateTargetHealth(self, instantly=True)
00135 if self.isPlayer:
00136 AnGUI.service.avatarHud.setHpBar(self.healthPercent / 100.0)
00137
00138 def rpcPerformAction(self, actionId):
00139 print "Actor.rpcPerformAction() actionId=%d" % (actionId)
00140 action = self.actionTable[actionId]
00141 action()
00142
00143
00144 def rpcChangeState(self, stateIndex, stateValue):
00145 func = self.stateChangeHandlers[stateIndex]
00146 func(stateValue)
00147
00148
00149 def rpcProcessEvent(self, sourceId, eventType, eventValue):
00150 print "[%d].Actor.rpcProcessEvent(): sourceId=%d, eventType=%d [%s], eventValue=%d" % \
00151 (self.id, sourceId, eventType, event.EVENTS[eventType], eventValue)
00152
00153
00154 func = None
00155 try:
00156 func = self.eventProc[eventType]
00157 except:
00158 pass
00159
00160 if func != None: func(sourceId, eventType, eventValue)
00161 else: print 'rpc event function code=%d not found' % (eventType)
00162
00163
00164
00165
00166
00167 def addEventProc(self, eventId, proc):
00168
00169 self.eventProc[eventId]=proc
00170
00171 def eventYouDied(self, attackerId, eventyType, eventValue):
00172 print "[%d].eventYouDied(): attackerId=%d, eventValue=%d" % (self.id, attackerId, eventValue)
00173
00174
00175