its not work
import direct.directbase.DirectStart
from pandac.PandaModules import OdeWorld, OdeSimpleSpace, OdeJointGroup
from pandac.PandaModules import OdeBody, OdeMass, OdeBoxGeom, OdePlaneGeom
from pandac.PandaModules import BitMask32, CardMaker, Vec4, Quat
from random import randint, random
from direct.actor.Actor import Actor
from panda3d.ai import *
from direct.showbase.DirectObject import DirectObject
from direct.task import Task
from pandac.PandaModules import *
import math,random,sys,os
class ODEEngine(DirectObject):
def __init__(self):
from pandac.PandaModules import loadPrcFileData
loadPrcFileData("", "want-directtools #t")
loadPrcFileData("", "want-tk #t")
loadPrcFileData("", """sync-video 0
"""
)
self.world = OdeWorld()
self.world.setGravity(0, 0, -90.81)
self.world.initSurfaceTable(1)
self.world.setSurfaceEntry(0, 0, 150, 0.0, 9.1, 0.9, 0.00001, 0.0, 0.002)
self.space = OdeSimpleSpace()
self.space.setAutoCollideWorld(self.world)
self.contactgroup = OdeJointGroup()
self.space.setAutoCollideJointGroup(self.contactgroup)
self.ralph = Actor ("models/ralph",
{"run":"models/ralph-run",
"walk":"models/ralph-walk"})
self.arrow = loader.loadModel("arrow")
self.ralph.setTextureOff()
self.objects = []
for i in range(1):
self.ralphNP = NodePath(PandaNode("ralphnode"))
self.ralphNP.reparentTo(render)
self.ralph.reparentTo(self.ralphNP)
self.ralphNP.setPos(0,0,15)
self.ralph.setHpr(0,0,0)
self.ralphNP.setHpr(0,0,0)
self.ralphBody = OdeBody(self.world)
M = OdeMass()
M.setBox(50, 1, 1, 1)
self.ralphBody.setMass(M)
self.ralphBody.setPosition(self.ralphNP.getPos(render))
self.ralphBody.setQuaternion(self.ralphNP.getQuat(render))
self.boxGeom = OdeBoxGeom(self.space, 1, 1, 1)
self.boxGeom.setCollideBits(BitMask32(0x00000002))
self.boxGeom.setCategoryBits(BitMask32(0x00000001))
self.boxGeom.setBody(self.ralphBody)
self.objects.append((self.ralphNP, self.ralphBody))
self.arrowNP = self.arrow.copyTo(render)
self.arrowNP.setPos(5,5,5)
self.arrowBody = OdeBody(self.world)
self.arrowBody.setMass(M)
self.arrowBody.setPosition(self.arrowNP.getPos(render))
self.arrowBody.setQuaternion(self.arrowNP.getQuat(render))
self.arrowGeom = OdeBoxGeom(self.space, 1, 1, 1)
self.arrowGeom.setCollideBits(BitMask32(0x00000001))
self.arrowGeom.setCategoryBits(BitMask32(0x00000002))
self.arrowGeom.setBody(self.arrowBody)
self.objects.append((self.arrowNP, self.arrowBody))
self.setupAI()
cm = CardMaker("ground")
cm.setFrame(-20, 20, -20, 20)
ground = render.attachNewNode(cm.generate())
ground.setPos(0, 0, 0); ground.lookAt(0, 0, -1)
groundGeom = OdePlaneGeom(self.space, Vec4(0, 0, 1, 0))
groundGeom.setCollideBits(BitMask32(0x00000001))
groundGeom.setCategoryBits(BitMask32(0x00000002))
base.disableMouse()
base.camera.setPos(0, 40, 20)
base.camera.lookAt(0, 0, 0)
taskMgr.doMethodLater(0.5, self.simulationTask, "Physics Simulation")
oderay = OdeRayGeom(self.space , -7)
oderay.set(0, 0, 0,0,0,7)
base.setFrameRateMeter(True)
def setupAI(self):
self.AIWorld = AIWorld(render)
self.AIChar = AICharacter("ralph",self.ralphNP,60,0.5,15)
self.AIWorld.addAiChar(self.AIChar)
self.AIBehaviors = self.AIChar.getAiBehaviors()
self.AIBehaviors.pursue(self.arrow)
taskMgr.add(self.AIUpdate,"AIUpdate")
return
def run(self):
run()
def simulationTask(self,task):
self.space.autoCollide()
self.world.quickStep(globalClock.getDt())
for self.np, self.body in self.objects :
self.np.setPosQuat(render, self.body.getPosition(), Quat(self.body.getQuaternion()))
self.contactgroup.empty()
def AIUpdate(self,task):
self.AIWorld.update()
self.AIBehaviors.pursue(self.arrow)
return task.cont
ode = ODEEngine()
ode.run()