panda3d/direct/src/distributed/ClientDistClass.py
2000-11-09 04:14:31 +00:00

73 lines
2.1 KiB
Python

"""ClientDistClass module: contains the ClientDistClass class"""
from PandaModules import *
import DirectNotifyGlobal
import ClientDistUpdate
class ClientDistClass:
def __init__(self, dcClass):
self.number = dcClass.getNumber()
self.name = dcClass.getName()
self.allFields = self.parseFields(dcClass)
self.allCDU = self.createAllCDU(self.allFields)
self.number2CDU = self.createNumber2CDUDict(self.allCDU)
self.name2CDU = self.createName2CDUDict(self.allCDU)
self.allRequiredCDU = self.listRequiredCDU(self.allCDU)
return None
def parseFields(self, dcClass):
fields=[]
for i in range(0,dcClass.getNumInheritedFields()):
fields.append(dcClass.getInheritedField(i))
return fields
def createAllCDU(self, allFields):
allCDU = []
for i in allFields:
allCDU.append(ClientDistUpdate.ClientDistUpdate(i))
return allCDU
def createNumber2CDUDict(self, allCDU):
dict={}
for i in allCDU:
dict[i.number] = i
return dict
def createName2CDUDict(self, allCDU):
dict={}
for i in allCDU:
dict[i.name] = i
return dict
def listRequiredCDU(self, allCDU):
requiredCDU = []
for i in allCDU:
atom = i.field.asAtomicField()
if atom:
if (atom.isRequired() and atom.isBroadcast()):
requiredCDU.append(i)
return requiredCDU
def updateField(self, do, di):
# Get the update field id
fieldId = di.getArg(STUint16)
# look up the CDU
assert(self.number2CDU.has_key(fieldId))
cdu = self.number2CDU[fieldId]
# Let the cdu finish the job
cdu.updateField(self, do, di)
return None
def sendUpdate(self, cr, do, fieldName, args):
# Look up the cdu
assert(self.name2CDU.has_key(fieldName))
cdu = self.name2CDU[fieldName]
# Let the cdu finish the job
cdu.sendUpdate(cr, do, args)