DistributedNode.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. """DistributedNode module: contains the DistributedNode class"""
  2. from direct.showbase.ShowBaseGlobal import *
  3. from pandac.PandaModules import NodePath
  4. import DistributedObject
  5. from direct.task import Task
  6. import types
  7. class DistributedNode(DistributedObject.DistributedObject, NodePath):
  8. """Distributed Node class:"""
  9. def __init__(self, cr):
  10. try:
  11. self.DistributedNode_initialized
  12. except:
  13. self.DistributedNode_initialized = 1
  14. self.gotStringParentToken = 0
  15. DistributedObject.DistributedObject.__init__(self, cr)
  16. return None
  17. def disable(self):
  18. self.reparentTo(hidden)
  19. DistributedObject.DistributedObject.disable(self)
  20. def delete(self):
  21. try:
  22. self.DistributedNode_deleted
  23. except:
  24. self.DistributedNode_deleted = 1
  25. if not self.isEmpty():
  26. self.removeNode()
  27. DistributedObject.DistributedObject.delete(self)
  28. def generate(self):
  29. DistributedObject.DistributedObject.generate(self)
  30. self.gotStringParentToken = 0
  31. def __cmp__(self, other):
  32. # DistributedNode inherits from NodePath, which inherits a
  33. # definition of __cmp__ from FFIExternalObject that uses the
  34. # NodePath's compareTo() method to compare different
  35. # NodePaths. But we don't want this behavior for
  36. # DistributedNodes; DistributedNodes should only be compared
  37. # pointerwise.
  38. if self is other:
  39. return 0
  40. else:
  41. return 1
  42. ### setParent ###
  43. def b_setParent(self, parentToken):
  44. if type(parentToken) == types.StringType:
  45. self.setParentStr(parentToken)
  46. else:
  47. self.setParent(parentToken)
  48. # it's important to call the local setParent first.
  49. self.d_setParent(parentToken)
  50. def d_setParent(self, parentToken):
  51. if type(parentToken) == types.StringType:
  52. self.sendUpdate("setParentStr", [parentToken])
  53. else:
  54. self.sendUpdate("setParent", [parentToken])
  55. def setParentStr(self, parentTokenStr):
  56. assert(self.notify.debug('setParentStr: %s' % parentTokenStr))
  57. assert(self.notify.debug('isGenerated: %s' % self.isGenerated()))
  58. self.do_setParent(parentTokenStr)
  59. if len(parentTokenStr) > 0:
  60. self.gotStringParentToken = 1
  61. def setParent(self, parentToken):
  62. assert(self.notify.debug('setParent: %s' % parentToken))
  63. assert(self.notify.debug('isGenerated: %s' % self.isGenerated()))
  64. # if we are not yet generated and we just got a parent token
  65. # as a string, ignore whatever value comes in here
  66. justGotRequiredParentAsStr = ((not self.isGenerated()) and
  67. self.gotStringParentToken)
  68. if not justGotRequiredParentAsStr:
  69. self.do_setParent(parentToken)
  70. self.gotStringParentToken = 0
  71. def do_setParent(self, parentToken):
  72. """do_setParent(self, int parentToken)
  73. This function is defined simply to allow a derived class (like
  74. DistributedAvatar) to override the behavior of setParent if
  75. desired.
  76. """
  77. if not self.isDisabled():
  78. self.cr.parentMgr.requestReparent(self, parentToken)
  79. ###### set pos and hpr functions #######
  80. # setX provided by NodePath
  81. def d_setX(self, x):
  82. self.sendUpdate("setX", [x])
  83. # setY provided by NodePath
  84. def d_setY(self, y):
  85. self.sendUpdate("setY", [y])
  86. # setZ provided by NodePath
  87. def d_setZ(self, z):
  88. self.sendUpdate("setZ", [z])
  89. # setH provided by NodePath
  90. def d_setH(self, h):
  91. self.sendUpdate("setH", [h])
  92. # setP provided by NodePath
  93. def d_setP(self, p):
  94. self.sendUpdate("setP", [p])
  95. # setR provided by NodePath
  96. def d_setR(self, r):
  97. self.sendUpdate("setR", [r])
  98. def setXY(self, x, y):
  99. self.setX(x)
  100. self.setY(y)
  101. def d_setXY(self, x, y):
  102. self.sendUpdate("setXY", [x, y])
  103. def setXZ(self, x, z):
  104. self.setX(x)
  105. self.setZ(z)
  106. def d_setXZ(self, x, z):
  107. self.sendUpdate("setXZ", [x, z])
  108. # setPos provided by NodePath
  109. def d_setPos(self, x, y, z):
  110. self.sendUpdate("setPos", [x, y, z])
  111. # setHpr provided by NodePath
  112. def d_setHpr(self, h, p, r):
  113. self.sendUpdate("setHpr", [h, p, r])
  114. def setXYH(self, x, y, h):
  115. self.setX(x)
  116. self.setY(y)
  117. self.setH(h)
  118. def d_setXYH(self, x, y, h):
  119. self.sendUpdate("setXYH", [x, y, h])
  120. def setXYZH(self, x, y, z, h):
  121. self.setPos(x, y, z)
  122. self.setH(h)
  123. def d_setXYZH(self, x, y, z, h):
  124. self.sendUpdate("setXYZH", [x, y, z, h])
  125. # setPosHpr provided by NodePath
  126. def d_setPosHpr(self, x, y, z, h, p, r):
  127. self.sendUpdate("setPosHpr", [x, y, z, h, p, r])