Im creating a game, and whenever i try to use the code from the panda3d.ai it never works. However, when i run just the portion of the AI code it works fine.
from panda3d.ai import *
from direct.showbase.ShowBase import ShowBase
from pandac.PandaModules import *
from direct.task import Task
from direct.actor import Actor
from panda3d.ai import AIWorld
from panda3d.core import WindowProperties
from panda3d.core import Spotlight, DirectionalLight, AmbientLight
from panda3d.core import Vec4, Vec3
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.camera.setPos(0, -20, 32)
self.camera.setP(-60)
self.setWindow()
self.setLighting()
self.loadWorld()
self.loadTowers()
self.loadSeeker()
self.setAI()
def setWindow(self):
self.disableMouse()
properties = WindowProperties()
properties.setSize(1000, 750)
self.win.requestProperties(properties)
def setLighting(self):
mainLight = DirectionalLight("main light")
self.mainLightNodePath = self.render.attachNewNode(mainLight)
self.mainLightNodePath.setHpr(45, -45, 0)
self.render.setLight(self.mainLightNodePath)
ambientLight = AmbientLight("ambient light")
ambientLight.setColor(Vec4(0.2, 0.2, 0.2, 1))
self.ambientLightNodePath = self.render.attachNewNode(ambientLight)
self.render.setLight(self.ambientLightNodePath)
self.render.setShaderAuto()
def loadWorld(self):
self.world = loader.loadModel("models/Environment/environment")
self.world.reparentTo(self.render)
def loadTowers(self):
self.tower = loader.loadModel("models/room_industrial")
self.tower.reparentTo(render)
self.tower.setScale(0.075)
self.tower.setPos(0, 2, 5)
self.tower2 = loader.loadModel("models/room_industrial")
self.tower2.reparentTo(render)
self.tower2.setScale(0.075)
self.tower2.setPos(0, -6, 5)
self.tower3 = loader.loadModel("models/room_industrial")
self.tower3.reparentTo(render)
self.tower3.setScale(0.075)
self.tower3.setPos(4, -3.4, 5)
self.tower4 = loader.loadModel("models/room_industrial")
self.tower4.reparentTo(render)
self.tower4.setScale(0.075)
self.tower4.setPos(-4, -3.4, 5)
self.tower5 = loader.loadModel("models/room_industrial")
self.tower5.reparentTo(render)
self.tower5.setScale(0.075)
self.tower5.setPos(-4, 0, 5)
self.tower6 = loader.loadModel("models/room_industrial")
self.tower6.reparentTo(render)
self.tower6.setScale(0.075)
self.tower6.setPos(4, 0, 5)
def loadSeeker(self):
# Seeker
ralphStartPos = Vec3(-10, 0, 0)
self.seeker = Actor("models/act_p3d_chan", {"run": "models/a_p3d_chan_run"})
self.seeker.reparentTo(render)
self.seeker.setScale(0.5)
self.seeker.setPos(ralphStartPos)
# Target
self.target = loader.loadModel("models/teapot")
self.target.setColor(1, 0, 0)
self.target.setPos(5, 0, 0)
self.target.setScale(1)
self.target.reparentTo(render)
def setAI(self):
# Creating AI World
self.AIworld = AIWorld(render)
self.AIchar = AICharacter("seeker", self.seeker, 100, 0.05, 5)
self.AIworld.addAiChar(self.AIchar)
self.AIbehaviors = self.AIchar.getAiBehaviors()
self.AIbehaviors.seek(self.target)
self.seeker.loop("run")
# AI World update
taskMgr.add(self.AIUpdate, "AIUpdate")
# to update the AIWorld
def AIUpdate(self, task):
self.AIworld.update()
return Task.cont
game = Game()
game.run()
Here is the error that i get:
Warning: pandac.PandaModules is deprecated, import from panda3d.core instead
Known pipe types:
glxGraphicsPipe
(1 aux display modules not yet loaded.)
Traceback (most recent call last):
File "/home/glenn/Desktop/main.py", line 111, in <module>
game = Game()
File "/home/glenn/Desktop/main.py", line 22, in __init__
self.loadSeeker()
File "/home/glenn/Desktop/main.py", line 81, in loadSeeker
self.seeker = Actor("models/act_p3d_chan", {"run": "models/a_p3d_chan_run"})
TypeError: 'module' object is not callable