I am working with Tut-Chessboard modified example.
I need that when the mouse is over the DirectFrame not interact with the chessboard.
Do not know how to use the functions LCPrep, LCResponse and self.accept (“mouse1” self.LCPrep)
thank you very much for your help!
Here’s the code:
import direct.directbase.DirectStart
from panda3d.core import CollisionTraverser,CollisionNode
from panda3d.core import CollisionHandlerQueue,CollisionRay
from panda3d.core import TextNode
from panda3d.core import Point3,Vec3,Vec4,BitMask32
from direct.gui.OnscreenText import OnscreenText
from direct.showbase.DirectObject import DirectObject
from direct.task.Task import Task
import sys
from direct.gui.DirectGui import *
BLACK = Vec4(0,0,0,1)
WHITE = Vec4(1,1,1,1)
HIGHLIGHT = Vec4(0,1,1,1)
PIECEBLACK = Vec4(.15, .15, .15, 1)
def PointAtZ(z, point, vec):
return point + vec * ((z-point.getZ()) / vec.getZ())
def SquarePos(i):
return Point3((i%8) - 3.5, int(i/8) - 3.5, 0)
def SquareColor(i):
if (i + ((i/8)%2))%2: return BLACK
else: return WHITE
class World(DirectObject):
def __init__(self):
DirectFrame( state = DGG.NORMAL,
frameSize=(-4, 1, -1, 0.8),
pos=(1, -1, -1))
self.accept('escape', sys.exit)
base.disableMouse()
camera.setPosHpr(0, -13.75, 6, 0, -25, 0)
self.picker = CollisionTraverser()
self.pq = CollisionHandlerQueue()
self.pickerNode = CollisionNode('mouseRay')
self.pickerNP = camera.attachNewNode(self.pickerNode)
self.pickerNode.setFromCollideMask(BitMask32.bit(1))
self.pickerRay = CollisionRay()
self.pickerNode.addSolid(self.pickerRay)
self.picker.addCollider(self.pickerNP, self.pq)
self.squareRoot = render.attachNewNode("squareRoot")
self.squares = [None for i in range(64)]
self.pieces = [None for i in range(64)]
for i in range(64):
self.squares[i] = loader.loadModel("models/square")
self.squares[i].reparentTo(self.squareRoot)
self.squares[i].setPos(SquarePos(i))
self.squares[i].setColor(SquareColor(i))
self.squares[i].find("**/polygon").node().setIntoCollideMask(
BitMask32.bit(1))
self.squares[i].find("**/polygon").node().setTag('square', str(i))
self.hiSq = False
self.mouseTask = taskMgr.add(self.mouseTask, 'mouseTask')
def mouseTask(self, task):
if self.hiSq is not False:
self.squares[self.hiSq].setColor(SquareColor(self.hiSq))
self.hiSq = False
if base.mouseWatcherNode.hasMouse():
mpos = base.mouseWatcherNode.getMouse()
self.pickerRay.setFromLens(base.camNode, mpos.getX(), mpos.getY())
self.picker.traverse(self.squareRoot)
if self.pq.getNumEntries() > 0:
self.pq.sortEntries()
i = int(self.pq.getEntry(0).getIntoNode().getTag('square'))
self.squares[i].setColor(HIGHLIGHT)
self.hiSq = i
return Task.cont
w = World()
run()