mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-29 06:32:40 -06:00
144 lines
4.5 KiB
Python
144 lines
4.5 KiB
Python
|
from otp.ai.AIBase import *
|
||
|
from toontown.toonbase.ToontownGlobals import *
|
||
|
from toontown.racing.KartDNA import *
|
||
|
from direct.distributed.ClockDelta import *
|
||
|
from direct.distributed import DistributedSmoothNodeAI
|
||
|
from direct.fsm import FSM
|
||
|
from direct.task import Task
|
||
|
from direct.distributed.PyDatagram import *
|
||
|
|
||
|
class DistributedVehicleAI(DistributedSmoothNodeAI.DistributedSmoothNodeAI, FSM.FSM):
|
||
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedVehicleAI')
|
||
|
|
||
|
def __init__(self, air, avId):
|
||
|
self.ownerId = avId
|
||
|
DistributedSmoothNodeAI.DistributedSmoothNodeAI.__init__(self, air)
|
||
|
FSM.FSM.__init__(self, 'DistributedVehicleAI')
|
||
|
self.driverId = 0
|
||
|
self.kartDNA = [-1] * getNumFields()
|
||
|
self.__initDNA()
|
||
|
self.request('Off')
|
||
|
|
||
|
def generate(self):
|
||
|
DistributedSmoothNodeAI.DistributedSmoothNodeAI.generate(self)
|
||
|
|
||
|
def delete(self):
|
||
|
DistributedSmoothNodeAI.DistributedSmoothNodeAI.delete(self)
|
||
|
|
||
|
def __initDNA(self):
|
||
|
owner = self.air.doId2do.get(self.ownerId)
|
||
|
if owner:
|
||
|
self.kartDNA[KartDNA.bodyType] = owner.getKartBodyType()
|
||
|
self.kartDNA[KartDNA.bodyColor] = owner.getKartBodyColor()
|
||
|
self.kartDNA[KartDNA.accColor] = owner.getKartAccessoryColor()
|
||
|
self.kartDNA[KartDNA.ebType] = owner.getKartEngineBlockType()
|
||
|
self.kartDNA[KartDNA.spType] = owner.getKartSpoilerType()
|
||
|
self.kartDNA[KartDNA.fwwType] = owner.getKartFrontWheelWellType()
|
||
|
self.kartDNA[KartDNA.bwwType] = owner.getKartBackWheelWellType()
|
||
|
self.kartDNA[KartDNA.rimsType] = owner.getKartRimType()
|
||
|
self.kartDNA[KartDNA.decalType] = owner.getKartDecalType()
|
||
|
else:
|
||
|
self.notify.warning('__initDNA - OWNER %s OF KART NOT FOUND!' % self.ownerId)
|
||
|
|
||
|
def d_setState(self, state, avId):
|
||
|
self.sendUpdate('setState', [state, avId])
|
||
|
|
||
|
def requestControl(self):
|
||
|
avId = self.air.getAvatarIdFromSender()
|
||
|
accId = self.air.getAccountIdFromSender()
|
||
|
if self.driverId == 0:
|
||
|
self.request('Controlled', avId, accId)
|
||
|
|
||
|
def requestParked(self):
|
||
|
avId = self.air.getAvatarIdFromSender()
|
||
|
if avId == self.driverId:
|
||
|
self.request('Parked')
|
||
|
|
||
|
def start(self):
|
||
|
self.request('Parked')
|
||
|
|
||
|
def enterOff(self):
|
||
|
return None
|
||
|
|
||
|
def exitOff(self):
|
||
|
return None
|
||
|
|
||
|
def enterParked(self):
|
||
|
self.driverId = 0
|
||
|
self.d_setState('P', 0)
|
||
|
return None
|
||
|
|
||
|
def exitParked(self):
|
||
|
return None
|
||
|
|
||
|
def enterControlled(self, avId, accId):
|
||
|
self.driverId = avId
|
||
|
fieldList = ['setComponentL',
|
||
|
'setComponentX',
|
||
|
'setComponentY',
|
||
|
'setComponentZ',
|
||
|
'setComponentH',
|
||
|
'setComponentP',
|
||
|
'setComponentR',
|
||
|
'setComponentT',
|
||
|
'setSmStop',
|
||
|
'setSmH',
|
||
|
'setSmZ',
|
||
|
'setSmXY',
|
||
|
'setSmXZ',
|
||
|
'setSmPos',
|
||
|
'setSmHpr',
|
||
|
'setSmXYH',
|
||
|
'setSmXYZH',
|
||
|
'setSmPosHpr',
|
||
|
'setSmPosHprL',
|
||
|
'clearSmoothing',
|
||
|
'suggestResync',
|
||
|
'returnResync']
|
||
|
#self.air.setAllowClientSend(avId, self, fieldList, accId)
|
||
|
#hack until CLIENTAGENT_SET_FIELDS_SENDABLE works
|
||
|
#probably should not be kept for any longer than it needs to
|
||
|
dg = PyDatagram()
|
||
|
dg.addServerHeader(self.doId, self.air.ourChannel, STATESERVER_OBJECT_SET_OWNER)
|
||
|
dg.addUint64(accId << 32 | avId)
|
||
|
self.air.send(dg)
|
||
|
self.d_setState('C', self.driverId)
|
||
|
|
||
|
def exitControlled(self):
|
||
|
pass
|
||
|
|
||
|
def handleUnexpectedExit(self):
|
||
|
self.notify.warning('toon: %d exited unexpectedly, resetting vehicle %d' % (self.driverId, self.doId))
|
||
|
self.request('Parked')
|
||
|
self.requestDelete()
|
||
|
|
||
|
def getBodyType(self):
|
||
|
return self.kartDNA[KartDNA.bodyType]
|
||
|
|
||
|
def getBodyColor(self):
|
||
|
return self.kartDNA[KartDNA.bodyColor]
|
||
|
|
||
|
def getAccessoryColor(self):
|
||
|
return self.kartDNA[KartDNA.accColor]
|
||
|
|
||
|
def getEngineBlockType(self):
|
||
|
return self.kartDNA[KartDNA.ebType]
|
||
|
|
||
|
def getSpoilerType(self):
|
||
|
return self.kartDNA[KartDNA.spType]
|
||
|
|
||
|
def getFrontWheelWellType(self):
|
||
|
return self.kartDNA[KartDNA.fwwType]
|
||
|
|
||
|
def getBackWheelWellType(self):
|
||
|
return self.kartDNA[KartDNA.bwwType]
|
||
|
|
||
|
def getRimType(self):
|
||
|
return self.kartDNA[KartDNA.rimsType]
|
||
|
|
||
|
def getDecalType(self):
|
||
|
return self.kartDNA[KartDNA.decalType]
|
||
|
|
||
|
def getOwner(self):
|
||
|
return self.ownerId
|