Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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