the manual clearly says that using those tags, it’s looking for the tag “smileys” with whatever content. But this wont happen - what you’re saying (as I’m getting it) is related to the tags mentioned above by Novora, and I tried that kind of pattern and seen it working. Beside, I provided a test for both the 2 patterning versions, for those who wanna try:
*** pattern filtering event coming FROM tag key named ‘rays’ with value ‘ray1’ TO tag named ‘smileys’ with value ‘smiley1’ (IT WORKS)
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import CollisionHandlerEvent, CollisionNode, CollisionSphere, CollisionTraverser, CollisionRay
from pandac.PandaModules import VBase4, AmbientLight
base.disableMouse()
def collideEventIn(entry):
np_from=entry.getFromNodePath()
np_into=entry.getIntoNodePath()
print "'%s' collide with '%s'" % (
np_from.getName(), np_into.getName()
)
np_into.getParent().setColor(.6, 0.5, 1.0, 1)
def collideEventOut(entry):
np_into=entry.getIntoNodePath()
np_into.getParent().setColor(1.0, 1.0, 1.0, 1)
def rayupdate(task):
if base.mouseWatcherNode.hasMouse():
mpos=base.mouseWatcherNode.getMouse()
pickerRay.setFromLens(base.camNode, mpos.getX(),mpos.getY())
return task.cont
base.cTrav=CollisionTraverser()
collisionHandler = CollisionHandlerEvent()
collisionHandler.addInPattern("%(rays)ft-into-%(smileys)it")
collisionHandler.addOutPattern("%(rays)ft-out-%(smileys)it")
pickerNode=CollisionNode('mouseraycnode')
pickerNP=base.camera.attachNewNode(pickerNode)
pickerRay=CollisionRay()
pickerNode.addSolid(pickerRay)
pickerNode.setTag('rays', 'ray1')
base.cTrav.addCollider(pickerNP, collisionHandler)
smileCollider = loader.loadModel('smiley')
smileCollider.reparentTo(render)
smileCollider.setPos(0,20,0)
cnodePath = smileCollider.attachNewNode(CollisionNode('smileycnode'))
cnodePath.node().addSolid(CollisionSphere(0, 0, 0, 1))
cnodePath.setTag('smileys', 'smiley1')
DO=DirectObject()
DO.accept('ray1-into-smiley1', collideEventIn)
DO.accept('ray1-out-smiley1', collideEventOut)
taskMgr.add(rayupdate, "updatePicker")
run()
*** pattern filtering event coming FROM tag key named ‘rays’ with ANY value TO tag named ‘smileys’ with ANY value (IT FAILS)
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import CollisionHandlerEvent, CollisionNode, CollisionSphere, CollisionTraverser, CollisionRay
from pandac.PandaModules import VBase4, AmbientLight
base.disableMouse()
def collideEventIn(entry):
np_from=entry.getFromNodePath()
np_into=entry.getIntoNodePath()
print "'%s' collide with '%s'" % (
np_from.getName(), np_into.getName()
)
np_into.getParent().setColor(.6, 0.5, 1.0, 1)
def collideEventOut(entry):
np_into=entry.getIntoNodePath()
np_into.getParent().setColor(1.0, 1.0, 1.0, 1)
def rayupdate(task):
if base.mouseWatcherNode.hasMouse():
mpos=base.mouseWatcherNode.getMouse()
pickerRay.setFromLens(base.camNode, mpos.getX(),mpos.getY())
return task.cont
base.cTrav=CollisionTraverser()
collisionHandler = CollisionHandlerEvent()
collisionHandler.addInPattern("%(rays)fh-into-%(smileys)ih")
collisionHandler.addOutPattern("%(rays)fh-out-%(smileys)ih")
pickerNode=CollisionNode('mouseraycnode')
pickerNP=base.camera.attachNewNode(pickerNode)
pickerRay=CollisionRay()
pickerNode.addSolid(pickerRay)
pickerNode.setTag('rays', 'ray1')
base.cTrav.addCollider(pickerNP, collisionHandler)
smileCollider = loader.loadModel('smiley')
smileCollider.reparentTo(render)
smileCollider.setPos(0,20,0)
cnodePath = smileCollider.attachNewNode(CollisionNode('smileycnode'))
cnodePath.node().addSolid(CollisionSphere(0, 0, 0, 1))
cnodePath.setTag('smileys', 'smiley1')
DO=DirectObject()
DO.accept('rays-into-smileys', collideEventIn)
DO.accept('rays-out-smileys', collideEventOut)
taskMgr.add(rayupdate, "updatePicker")
run()
with both code pieces we expect the ball changing color while mouse pointer is over.