# Click and Drag
from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys
class World (DirectObject.DirectObject):
def __init__(self):
self.loadmodels()
self.mousemanager = MousePickingManager(self)
self.accept ('escape',self.quit)
def loadmodels(self):
light1Node=PointLight("light1")
light1=camera.attachNewNode(light1Node)
render.setLight(light1)
camera.setPos(0,-10,3)
camera.lookAt(0,0,0)
self.redpawn = Pawn("red pawn",self)
self.redpawn.obj.setColor(1,0,0,1)
self.bluepawn = Pawn("blue pawn",self)
self.bluepawn.obj.setColor(0,0,1,1)
self.bluepawn.obj.setPos(2,3,0)
taskMgr.add(self.update,"update")
camera.setH(0)
def update(self,task):
return task.cont
def quit (self):
print "bye bye"
sys.exit()
class Pawn (DirectObject.DirectObject):
def __init__(self,name,world):
self.name=name
self.world=world
p=loader.loadModel("pawn")
p.setName(name)
p.reparentTo(render)
p.setTag("mouseInteraction","1")
p.setPythonTag("pythonObject",self)
self.obj=p
self.dragging=False
self.accept("mouseDown"+self.name,self.onClick)
self.accept("mouseUp"+self.name,self.onRelease)
self.accept("mouseUpOutside"+self.name,self.onRelease)
taskMgr.add(self.update,"update")
def onClick(self):
self.dragging=True
self.dragOffset=self.obj.getPos() - self.world.mousemanager.getLastPickPoint()
print self.dragOffset
# store distance
def onRelease(self):
self.dragging=False
def update(self,task):
if self.dragging:
p=self.world.mousemanager.getMousePositionOnXZPlane()
self.obj.setPos(p+self.dragOffset)
return task.cont
w=World()
run()