class Flame(Entity): """ The thing that comes out the end of the thing you hold """ animspeed = 0.1 depth = 20 playerWidth = 3 speed = 20 def __init__(self, world, pos, hpr): super(Flame, self).__init__() self.shape = BulletBoxShape(Vec3(0.1,0.05,0.05)) self.bnode = BulletRigidBodyNode() self.bnode.setMass(1.0) self.bnode.addShape(self.shape) self.np = utilities.app.render.attachNewNode(self.bnode) self.world =world self.anim = list() self.anim.append(utilities.loadObject("flame1", depth=0)) self.anim.append(utilities.loadObject("flame2", depth=0)) self.anim.append(utilities.loadObject("flame3", depth=0)) world.bw.attachRigidBody(self.bnode) self.curspr = 0 self.obj = self.anim[self.curspr] self.obj.show() self.livetime = 0 self.delta = 0 self.pos = pos self.pos.y = Flame.depth #self.pos.z -= 0.2 self.hpr = hpr self.vel = Point2() self.vel.x = cos(world.player.angle)*Flame.speed self.vel.y = sin(world.player.angle)*Flame.speed tv = Vec3(self.vel.x, 0, self.vel.y) # this makes the shot miss the target if the player has any velocity tv += world.player.bnode.getLinearVelocity() self.bnode.setLinearVelocity(tv) tv.normalize() # initial position of RB and draw plane self.np.setHpr(hpr) self.np.setPos(pos+tv/2) self.bnode.setAngularFactor(Vec3(0,0,0)) self.bnode.setLinearFactor(Vec3(1,0,1)) self.bnode.setGravity(Vec3(0,0,0)) self.bnode.setCcdMotionThreshold(1e-7) self.bnode.setCcdSweptSphereRadius(0.10) self.bnode.notifyCollisions(True) self.bnode.setIntoCollideMask(BitMask32.bit(1)) self.bnode.setPythonTag("Entity", self) self.noCollideFrames = 4 for a in self.anim: a.hide() a.reparentTo(self.np) a.setScale(0.25, 1, 0.25) a.setPos(0, -0.1,0) def update(self, timer): #animation self.delta += timer self.livetime += timer if self.noCollideFrames == 0: self.bnode.setIntoCollideMask(BitMask32.allOn()) if self.noCollideFrames > -1: self.noCollideFrames -= 1 if self.delta > Flame.animspeed: self.delta = 0 self.obj.hide() self.curspr += 1 if self.curspr > len(self.anim)-1: self.curspr = 0 self.obj = self.anim[self.curspr] self.obj.show()
class App(ShowBase): def moveForward(self, catch): print('w key pressed') self.cy = 3.0 print(self.current_pos) def moveBackward(self, catch): print('w key pressed') self.cy = -3.0 print(self.current_pos) def moveLeft(self, catch): print('w key pressed') self.cx = 3.0 print(self.current_pos) def moveRight(self, catch): print('w key pressed') self.cx = -3.0 print(self.current_pos) def lookLeft(self, catch): self.current_omega = 120 def lookRight(self, catch): self.current_omega = -120 def lookUp(self, catch): self.current_hpr = (self.current_hpr[0], self.current_hpr[1] - 1, self.current_hpr[2]) def moveUp(self, catch): self.current_pos = (self.current_pos[0], self.current_pos[1], self.current_pos[2] + 1) def lookUp(self, catch): self.current_hpr = (self.current_hpr[0], self.current_hpr[1] + 1, self.current_hpr[2]) def lookDown(self, catch): self.current_hpr = (self.current_hpr[0], self.current_hpr[1] - 1, self.current_hpr[2]) def fire(self, catch): print("Fire!") if self.pandaPos[0] == self.current_pos[0] and self.pandaPos[ 2] + 0.5 == self.current_pos[2] and not self.pandaPos[ 1] == self.current_pos[1] and not self.pandaPos[ 1] - 1 == self.current_pos[1] and not self.current_pos[ 1] - 1 == self.pandaPos[1] and not self.current_pos[ 1] > self.pandaPos[1]: print('Oof') def jump(self, catch): self.player.setMaxJumpHeight(5.0) self.player.setJumpSpeed(8.0) self.player.doJump() def __init__(self): ShowBase.__init__(self) #self.word = BulletWorld() self.cx = 0.0 self.cy = 0.0 self.current_omega = 0 s = self.loader.loadSfx('Doom Soundtrack - Level 1 (Extended).mp3') s.play() self.current_pos = (10, 5, 1) self.current_hpr = (0, 0, 0) #self.fxboy = self.loader.loadModel("cubearm.egg") self.world = BulletWorld() self.world.setGravity(Vec3(0, 0, -12.0)) #self.physicsMgr.attachPhysicalNode(self.camera) keyboard.on_press_key('w', self.moveForward) keyboard.on_press_key('s', self.moveBackward) keyboard.on_press_key('j', self.lookLeft) keyboard.on_press_key('y', self.lookUp) keyboard.on_press_key('h', self.lookDown) keyboard.on_press_key('g', self.lookRight) keyboard.on_press_key('d', self.moveLeft) #self.fxboy.reparentTo(self.render) #self.camera.reparentTo(self.render) #self.camera.reparentTo(self.fxboy) keyboard.on_press_key('a', self.moveRight) keyboard.on_press_key('space', self.fire) keyboard.on_press_key('2', self.jump) #keyboard.on_press_key('y',self.lookUp) keyboard.on_press_key('1', self.moveUp) self.cam = BulletCapsuleShape(radius, height - 2 * radius, ZUp) self.player = BulletCharacterControllerNode(self.cam, 0.4, 'Player') self.playernp = self.render.attachNewNode(self.player) self.world.attachCharacter(self.playernp.node()) self.camera.reparentTo(self.playernp) self.playernp.setPos(self.current_pos) self.playernp.setHpr(self.current_hpr) self.playernp.setH(45) #self.player.setMass(10.0) # self.playernp.setCollideMask(BitMask32.allOn()) self.disableMouse() self.scenes = BulletBoxShape(Vec3(0.25, 0.25, 0.25)) self.scenenode = BulletRigidBodyNode('Scene') self.scenenode.setMass(12.0) self.scenenode.addShape(self.scenes) self.scenenp = render.attachNewNode(self.scenenode) self.scenenp.setPos(-8, 40, 0) self.world.attachRigidBody(self.scenenode) self.scene = self.loader.loadModel("models/environment.egg.pz") self.scene.reparentTo(self.render) self.scene.setScale(0.25, 0.25, 0.25) self.scene.setPos(-8, 40, 0) self.scene.reparentTo(self.scenenp) self.scenenode.setGravity(Vec3(0, 0, 0)) #self.taskMgr.add(self.spinCameraTask,"SpinCameraTask") self.taskMgr.add(self.moveChar, "MoveChar") self.taskMgr.add(self.moveCBod, "MoveCBod") self.pandaActor = Actor("cubearm.egg", {"walk": "cubearm4-ArmatureAction.egg"}) self.pandaActor.setScale(0.12, 0.12, 0.12) self.pandaActor.setPos((10, 10, 0.5)) self.pandaPos = (10, 10, 0.5) self.pandaActor.reparentTo(self.render) self.pandaActor.loop('walk') ''' posInterval1 = self.pandaActor.posInterval(13,Point3(0,-10,0),startPos=Point3(0,10,0)) posInterval2 = self.pandaActor.posInterval(13,Point3(0,10,0),startPos=Point3(0,-10,0)) hprInterval1 = self.pandaActor.hprInterval(3,Point3(180,0,0),startHpr=Point3(0,0,0)) hprInterval2 = self.pandaActor.hprInterval(3,Point3(0,0,0),startHpr=Point3(180,0,0)) self.pandaPace = Sequence(posInterval1,hprInterval1,posInterval2,hprInterval2,name="pandaPace") self.pandaPace.loop() ''' def spinCameraTask(self, task): print(task.time * 6.0) angleDegrees = task.time * 6.0 angleRadians = angleDegrees * (pi / 180.0) self.camera.setPos(20 * sin(angleRadians), -20 * cos(angleRadians), 3) self.camera.setHpr(angleDegrees, 0, 0) return Task.cont def moveChar(self, task): speed = Vec3(0, 0, 0) omega = self.current_omega speed.setX(self.cx) speed.setY(self.cy) #self.scenenp.setPos(-8,40,0) print('[Scene]: ' + str(self.scenenp.getPos())) print('[Cam]: ' + str(self.playernp.getPos())) self.player.setAngularMovement(omega) #self.player.setLinearMovement(speed,True) #self.playernp.setPos(self.current_pos) self.playernp.setHpr(self.current_hpr) return task.cont def moveCBod(self, task): self.world.doPhysics(globalClock.getDt()) return task.cont
class Flame(Entity): """ The thing that comes out the end of the thing you hold """ animspeed = 0.1 depth = 20 playerWidth = 3 speed = 30 maxlife = 10 damage = 30 def __init__(self, world, pos, hpr): super(Flame, self).__init__() self.shape = BulletBoxShape(Vec3(0.1, 0.05, 0.05)) self.bnode = BulletRigidBodyNode() self.bnode.setMass(0.00001) self.bnode.addShape(self.shape) self.np = utilities.app.render.attachNewNode(self.bnode) self.remove = False self.world = world self.anim = list() self.anim.append(utilities.loadObject("flame1", depth=0)) self.anim.append(utilities.loadObject("flame2", depth=0)) self.anim.append(utilities.loadObject("flame3", depth=0)) world.bw.attachRigidBody(self.bnode) self.curspr = 0 self.livetime = 0 self.delta = 0 self.pos = pos self.pos.y = Flame.depth self.hpr = hpr self.vel = Point2() self.vel.x = cos(world.player.angle) * Flame.speed self.vel.y = sin(world.player.angle) * Flame.speed tv = Vec3(self.vel.x, 0, self.vel.y) # this makes the shot miss the target if the player has any velocity tv += world.player.bnode.getLinearVelocity() self.bnode.setLinearVelocity(tv) tv.normalize() # initial position of RB and draw plane self.np.setHpr(hpr) self.np.setPos(pos + tv / 2) self.bnode.setAngularFactor(Vec3(0, 0, 0)) self.bnode.setLinearFactor(Vec3(1, 0, 1)) self.bnode.setGravity(Vec3(0, 0, 0)) #self.bnode.setCcdMotionThreshold(1e-7) #self.bnode.setCcdSweptSphereRadius(0.50) self.bnode.notifyCollisions(True) self.bnode.setIntoCollideMask(BitMask32.bit(1)) self.bnode.setPythonTag("Entity", self) self.noCollideFrames = 4 for a in self.anim: a.hide() a.reparentTo(self.np) a.setScale(0.25, 1, 0.25) a.setPos(0, -0.1, 0) self.obj = self.anim[self.curspr] self.obj.show() self.bnode.setPythonTag("entity", self) def update(self, timer): #animation self.delta += timer self.livetime += timer if self.remove: self.obj.hide() return if self.noCollideFrames == 0: self.bnode.setIntoCollideMask(BitMask32.allOn()) if self.noCollideFrames > -1: self.noCollideFrames -= 1 if self.delta > Flame.animspeed: self.delta = 0 self.obj.hide() self.curspr += 1 if self.curspr > len(self.anim) - 1: self.curspr = 0 self.obj = self.anim[self.curspr] self.obj.show() if self.livetime > Flame.maxlife: self.remove = True def hitby(self, index, projectile): return def destroy(self): self.remove = True self.obj.hide() for model in self.anim: model.remove() self.world.bw.removeRigidBody(self.bnode) def removeOnHit(self): self.remove = True