In the development of:
I am making monsters that attack the player. But they are coming too fast and don’t give the time for the player to attack (The monster doesn’t damage but will in the future).
Code and models and stuff (Spoiler)
from direct.showbase.ShowBase import ShowBase
from direct.actor.Actor import Actor
from direct.task import Task
from panda3d.core import *
loadPrcFile("config/config.prc")
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.disableMouse()
self.cTrav = CollisionTraverser()
self.pusher = CollisionHandlerPusher()
self.pusher.setHorizontal(True)
self.room = self.loader.loadModel("models/room.egg")
self.room.setH(270)
self.room.reparentTo(self.render)
self.camera.setPos(0, -20, 2)
self.keyMap = {"w" : False, "a" : False, "s" : False, "d" : False, "arrow_left" : False, "arrow_right" : False}
for key in self.keyMap:
self.accept(key, self.updateKeyMap, [key, True])
self.accept(key + "-up", self.updateKeyMap, [key, False])
self.taskMgr.add(self.update, "update")
camCenter = self.camera.getBounds().getCenter()
camRad = 2
cNode = CollisionNode("camera")
cNode.addSolid(CollisionSphere(camCenter, camRad))
cameraC = self.camera.attachNewNode(cNode)
self.cTrav.addCollider(cameraC, self.pusher)
self.pusher.addCollider(cameraC, self.camera)
wallNode = CollisionNode("wall")
wallSolid = CollisionCapsule(-4, -6, 1, -1, -6, 1, 0.5)
wallNode.addSolid(wallSolid)
wallC = render.attachNewNode(wallNode)
wallNode = CollisionNode("wall")
wallSolid = CollisionPlane(Plane(Vec3(1, 0, 0), Point3(-5, 0, 2)))
wallNode.addSolid(wallSolid)
wallC = render.attachNewNode(wallNode)
wallNode = CollisionNode("wall")
wallSolid = CollisionPlane(Plane(Vec3(0, 1, 0), Point3(6, -15, 2)))
wallNode.addSolid(wallSolid)
wallC = render.attachNewNode(wallNode)
wallNode = CollisionNode("wall")
wallSolid = CollisionPlane(Plane(Vec3(-1, 0, 0), Point3(5, -5, 2)))
wallNode.addSolid(wallSolid)
wallC = render.attachNewNode(wallNode)
wallNode = CollisionNode("wall")
wallSolid = CollisionPlane(Plane(Vec3(0, -1, 0), Point3(-3, 5, 2)))
wallNode.addSolid(wallSolid)
wallC = render.attachNewNode(wallNode)
self.monster = Actor("models/monster1.egg", {"attack" : "models/monster1-pincer-attack-both.egg", "explode" : "models/monster1-explode.egg"})
self.monster.reparentTo(self.render)
def updateKeyMap(self, key, value):
self.keyMap[key] = value
def update(self, task):
dt = globalClock.getDt()
if self.keyMap.get("w"):
self.camera.setY(self.camera, dt * 10)
elif self.keyMap.get("a"):
self.camera.setX(self.camera, dt * -5)
elif self.keyMap.get("s"):
self.camera.setY(self.camera, dt * -10)
elif self.keyMap.get("d"):
self.camera.setX(self.camera, dt * 5)
elif self.keyMap.get("arrow_left"):
self.camera.setH(self.camera, dt * 40)
elif self.keyMap.get("arrow_right"):
self.camera.setH(self.camera, dt * -40)
self.monster.lookAt(self.camera)
self.monster.setY(self.monster, 1)
return Task.cont
game = Game()
game.run()
config.zip (184 Bytes)
Convert to .ico
models.zip (921.5 KB)