Esempio n. 1
0
    def __init__(self, x, y, z):

        self.model = loader.loadModel("models/circle")
        self.model.reparentTo(render)
        self.model.setPos(x, y, z)
        self.model.setHpr(0, 0, 0)
        self.model.setColor(1, 1, 1, 1)
        self.model.setTexture(loader.loadTexture('textures/spiral.png'))

        self.glow = loader.loadModel("models/tube")
        self.glow.reparentTo(render)
        self.glow.setShaderOff()
        self.glow.setLightOff()
        self.glow.hide(BitMask32.allOn())
        self.glow.show(BitMask32(0x01))
        self.glow.setPos(x, y, z + 0.05)
        self.glow.setHpr(0, 0, 0)
        self.glow.setColor(1, 1, 1, 1)
        texture = loader.loadTexture('textures/green_glow.png')
        texture.setWrapU(Texture.WMClamp)
        texture.setWrapV(Texture.WMClamp)
        self.glow.setTexture(texture)
        self.glow.setTransparency(TransparencyAttrib.MAlpha)
        self._active = False
        self.visibility = 0

        taskMgr.add(self._update_task, "AcceleratorUpdateTask")
Esempio n. 2
0
	def __init__(self, render, world, base, originMap, hopper, idNum, strength = 1, size = 1.2):
		self.render = render
		self.world = world
		self.base = base
		self.originMap = originMap
		self.hopper = hopper
		self.idNum = idNum
		self.strength = strength 
		self.size = size
	
		self.volume = 1
		self.turned = False
		self.isAttacking = False
		self.mult = 1

		self.attackSound = self.base.loader.loadSfx("sounds/bloodSquirt.mp3")
		self.attackSound.setVolume(1) 
		self.damageSound = self.base.loader.loadSfx("sounds/swordSlash.mp3")
		self.damageSound.setVolume(0.5) 

		self.freeze = False

		#----- Setup Enemy -----
		h = 2.75
		w = self.size + 0.2
		
		enemyShape = BulletCapsuleShape(w, h - 2 * w, ZUp)

		self.enemyBulletNode = BulletCharacterControllerNode(enemyShape, 0.4, "Enemy")
		self.enemyNP = self.render.attachNewNode(self.enemyBulletNode)
		self.enemyNP.setPos(originMap)
		self.enemyNP.setH(90)
		self.enemyNP.setCollideMask(BitMask32.allOn())
		self.world.attachCharacter(self.enemyBulletNode)

		self.enemyModel = Actor("models/art/monster/bvw-f2004--monster/monster1.egg", {
				 'idle' : 'models/art/monster/bvw-f2004--monster/monster1-idle.egg',
				 'explode' : 'models/art/monster/bvw-f2004--monster/monster1-explode.egg',
				 'attackL' : 'models/art/monster/bvw-f2004--monster/monster1-pincer-attack-left.egg',
				 'attackR' : 'models/art/monster/bvw-f2004--monster/monster1-pincer-attack-right.egg',
				 'attackT' : 'models/art/monster/bvw-f2004--monster/monster1-tentacle-attack.egg',
				 'attackLR' : 'models/art/monster/bvw-f2004--monster/monster1-pincer-attack-both.egg'})

		self.enemyModel.reparentTo(self.enemyNP)
		self.enemyModel.setScale(0.42 * self.size)
		self.enemyModel.setH(180)
		self.enemyModel.setPos(0, 0, 1)
		self.enemyModel.loop("idle")
		#self.setupPoison()

		self.enemyCollider = self.enemyModel.attachNewNode(CollisionNode('enemyNode'))
		self.enemyCollider.node().addSolid(CollisionSphere(0, 0, 0, 1))
		self.enemyCollider.setTag("id", str(self.idNum))
 def __setupEnvironment(self):
     cm = CardMaker("ground")
     size = 200
     cm.setFrame(-size, size, -size, size)
     environment = render.attachNewNode(cm.generate())
     environment.lookAt(0, 0, -1)
     environment.setPos(100, -100, 0)
     environment.setCollideMask(BitMask32.allOn())
     environment.reparentTo(render)
     
     texture = loader.loadTexture("textures/ground.png")
     
     # This is so the textures can look better from a distance
     texture.setMinfilter(Texture.FTLinearMipmapLinear)
     
     environment.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition) 
     environment.setTexScale(TextureStage.getDefault(), 0.02, 0.02)
     environment.setTexture(texture, 1)
    def __setupEnvironment(self):
        cm = CardMaker("ground")
        size = 100
        cm.setFrame(-size, size, -size, size)
        environment = render.attachNewNode(cm.generate())
        environment.lookAt(0, 0, -1)
        environment.setPos(0, 0, 0)
        environment.setCollideMask(BitMask32.allOn())
        environment.reparentTo(render)

        texture = loader.loadTexture("textures/ground.png")

        # This is so the textures can look better from a distance
        texture.setMinfilter(Texture.FTLinearMipmapLinear)

        environment.setTexGen(TextureStage.getDefault(),
                              TexGenAttrib.MWorldPosition)
        environment.setTexScale(TextureStage.getDefault(), 0.02, 0.02)
        environment.setTexture(texture, 1)
class GameObject:
    bitmaskAll = BitMask32.allOn()
    bitmaskDefault = BitMask32.bit(0)
    bitmaskBullet = BitMask32.bit(1)
    bitmaskCharacter = BitMask32.bit(2)
    bitmaskBox = BitMask32.bit(3)
    bitmaskTileGlued = BitMask32.bit(4)
    bitmaskTile = BitMask32.bit(5)

    def __init__(self, world):
        world.addObject(self)
        self.world = world
        self.body = None
        self.geom = None
        self.node = None

        self.active = True
        self.visibleAfterDestroy = False
        self.dissipateCountdown = 0

    def updatePosFromPhysics(self):
        if self.body != None:
            self.node.setPosQuat(render, self.body.getPosition(),
                                 Quat(self.body.getQuaternion()))

    def getMomentum(self):
        mass = self.body.getMass().getMagnitude()
        speed = self.body.getLinearVel().length()
        return mass * speed

    def dissipate(self, factor, interval=5):
        if self.body == None or self.dissipateCountdown > 0:
            return
        self.body.setLinearVel(self.body.getLinearVel() * factor)
        self.body.setAngularVel(self.body.getAngularVel() * factor)
        self.dissipateCountdown = interval + 1
        self.dissipateRecover()

    def dissipateRecover(self):
        self.dissipateCountdown -= 1
        if self.dissipateCountdown > 0:
            self.world.performAfterStep(self.dissipateRecover, [])

    def onCollision(self, otherBody, entry):
        pass

    def destroy(self):
        self.active = False
        self.world.removeObject(self)

    def doDestroy(self):
        if self.node != None and not self.visibleAfterDestroy:
            self.node.detachNode()
        if self.geom != None:
            self.geom.disable()
        if self.body != None:
            self.body.disable()
        return

        # This is the code that actually removes the elements instead of just disabling them.
        # But it doesn't work.
        obj = self
        print obj  #DEBUG
        print threading.current_thread()  #DEBUG
        print "0",  #DEBUG
        if obj.node != None:
            obj.node.detachNode()
            obj.node = None
        print "1",  #DEBUG
        if obj.geom != None:
            self.world.space.remove(obj.geom)  #Probably unnecessary
        print "2",  #DEBUG
        if obj.geom != None:
            obj.geom.destroy()
            obj.geom = None
        print "3",  #DEBUG
        if obj.body != None:
            obj.body.destroy()
            obj.body = None
        print "4"  #DEBUG
Esempio n. 6
0
    def __init__(self):
        
        self.keyMap = {"left":0, "right":0, "forward":0, "backward":0, "shoot":0}
        base.win.setClearColor(Vec4(0,0,0,1))

        # Post the instructions
        self.inst6 = addInstructions(0.95, "Mad Max's Revenge!")
        self.inst1 = addInstructions(0.90, "[ESC]: Quit")
        self.inst2 = addInstructions(0.85, "[a]: Left Turn")
        self.inst3 = addInstructions(0.80, "[d]: Right Turn")
        self.inst4 = addInstructions(0.75, "[w]: Drive Forward")
        self.inst4 = addInstructions(0.70, "[s]: Reverse")
        self.inst5 = addInstructions(0.65, "[mouse]: Fire Rocket")
        
        # Set up the environment
        #
        # This environment model contains collision meshes.  If you look
        # in the egg file, you will see the following:
        #
        #    <Collide> { Polyset keep descend }
        #
        # This tag causes the following mesh to be converted to a collision
        # mesh -- a mesh which is optimized for collision, not rendering.
        # It also keeps the original mesh, so there are now two copies ---
        # one optimized for rendering, one for collisions.  

        self.environ = loader.loadModel("Assets/Models/env")    #models/environment  
        self.environ.reparentTo(render)
        self.environ.setPos(0,0,0)
        self.sky = loader.loadModel("Assets/Models/sky")    #models/environment  
        self.sky.reparentTo(render)
        self.sky.setPos(0,0,0)
        
        # Create the main character, player

        playerStartPos = Point3(8,14,1) #self.environ.find("**/start_point").getPos()
        enemyStartPos = Point3(-7,-8,1) #self.environ.find("**/start_point").getPos()
        #~ print enemyStartPos
        enemyStartPos.addX(1.0)
        enemyStartPos.addY(1.0)
        #~ print enemyStartPos

        
        self.player = Actor("Assets/Models/player_model", {"drive":"Assets/Models/player_drive", "fire":"Assets/Models/player_turret", "drivefire":"Assets/Models/player_both"})
        self.player.reparentTo(render)
        self.player.setScale(0.1)
        self.player.setPos(playerStartPos)
        #~ self.playerdrive=self.player.actorInterval("drive")
        #~ self.playerfire=self.player.actoraaaaaaaInterval("fire")
        #~ self.playerdrivefire=self.player.actorInterval("drivefire")
        
        # Create the enemy, Enemy
        self.enemy = Actor("Assets/Models/enemy_model", {"drive":"Assets/Models/enemy_drive", "fire":"Assets/Models/enemy_turret", "drivefire":"Assets/Models/enemy_both"})
        self.enemy.reparentTo(render)
        self.enemy.setScale(0.1)
        tex = loader.loadTexture("Assets/Models/cartexture1.png")
        self.enemy.setTexture(tex, 1)
        self.enemy.setPos(enemyStartPos)
        self.enemyrockettiming = globalClock.getFrameTime()
        #print self.enemy.getCurrentAnim()

        #print self.enemy.getCurrentAnim()
        #~ self.enemydrive=self.enemy.actorInterval("drive")
        #~ self.enemyfire=self.enemy.actorInterval("fire")
        #~ self.enemydrivefire=self.enemy.actorInterval("drivefire")
        
        self.music = loader.loadMusic("Assets/Sound/music.mp3")
        SoundInterval(self.music).loop()

        audio3d.attachSoundToObject(EnemyRunning, self.enemy)
        audio3d.attachSoundToObject(EnemyIdling, self.enemy)

        backward = self.enemy.getNetTransform().getMat().getRow3(1)
        backward.setZ(0)
        backward.normalize()
        #self.enemy.setPos(self.enemy.getPos() - backward*(50))

        #Set up the lighting
        self.playerleftlight=self.player.attachNewNode(Spotlight("playerheadleft"))
        self.playerleftlight.node().setColor(Vec4(0.75, 0.75, 0.75, 1))
        self.playerleftlight.node().setLens( PerspectiveLens() )
        self.playerleftlight.node().getLens().setFov( 50, 50)
        self.playerleftlight.node().setAttenuation( Vec3( 0.1, 0.005, 0.0 ) )
        self.playerleftlight.node().setExponent( 60.0 )
        self.playerleftlight.setPos(-1, -0.1, 1.5)
        self.playerleftlight.setHpr(180, -10, 0)
        render.setLight(self.playerleftlight)
        
        self.playerrightlight=self.player.attachNewNode(Spotlight("playerheadright"))
        self.playerrightlight.node().setColor(Vec4(0.75, 0.75, 0.75, 1))
        self.playerrightlight.node().setLens( PerspectiveLens() )
        self.playerrightlight.node().getLens().setFov( 50, 50)
        self.playerrightlight.node().setAttenuation( Vec3( 0.1, 0.005, 0.0 ) )
        self.playerrightlight.node().setExponent( 60.0 )
        self.playerrightlight.setPos(1, -0.1, 1.5)
        self.playerrightlight.setHpr(180, -10, 0)
        render.setLight(self.playerrightlight)

        self.playerlightson=1

        self.enemyleftlight=self.enemy.attachNewNode(Spotlight("enemyheadleft"))
        self.enemyleftlight.node().setColor(Vec4(0.75, 0.75, 0.75, 1))
        self.enemyleftlight.node().setLens( PerspectiveLens() )
        self.enemyleftlight.node().getLens().setFov( 50, 50)
        self.enemyleftlight.node().setAttenuation( Vec3( 0.1, 0.005, 0.0 ) )
        self.enemyleftlight.node().setExponent( 60.0 )
        self.enemyleftlight.setPos(-1, -0.1, 1.5)
        self.enemyleftlight.setHpr(180, -10, 0)
        render.setLight(self.enemyleftlight)
        
        self.enemyrightlight=self.enemy.attachNewNode(Spotlight("enemyheadright"))
        self.enemyrightlight.node().setColor(Vec4(0.75, 0.75, 0.75, 1))
        self.enemyrightlight.node().setLens( PerspectiveLens() )
        self.enemyrightlight.node().getLens().setFov( 50, 50)
        self.enemyrightlight.node().setAttenuation( Vec3( 0.1, 0.005, 0.0 ) )
        self.enemyrightlight.node().setExponent( 60.0 )
        self.enemyrightlight.setPos(1, -0.1, 1.5)
        self.enemyrightlight.setHpr(180, -10, 0)
        render.setLight(self.enemyrightlight)
        
        self.enemylightson=1
        
        self.spotlight=camera.attachNewNode(PointLight("spotlight"))
        #self.spotlight.setPos(0, 3, 0.5)
        #self.spotlight.setHpr(0, 0, 0)
        self.spotlight.node().setColor(Vec4(1, 1, 1, 1))
        #self.spotlight.node().setLens( PerspectiveLens() )
        #self.spotlight.node().getLens().setFov( 180, 120)
        self.spotlight.node().setAttenuation( Vec3( 1, 0, 0.05 ))
        #self.spotlight.node().setExponent( 60.0 )
        render.setLight(self.spotlight)
        
        self.playerlight=self.player.attachNewNode(PointLight("spotlight"))
        self.playerlight.node().setColor(Vec4(1, 1, 1, 1))
        #self.spotlight.node().setLens( PerspectiveLens() )
        #self.spotlight.node().getLens().setFov( 180, 120)
        self.playerlight.node().setAttenuation( Vec3( 1, 0, 0.05 ))
        #self.spotlight.node().setExponent( 60.0 )
        render.setLight(self.playerlight)
        
        
        self.ambientlight=self.sky.attachNewNode(AmbientLight("ambientLight"))
        self.ambientlight.node().setColor(Vec4(1, 1, 1, 1))
        self.sky.setLight(self.ambientlight)

        # Create a floater object.  We use the "floater" as a temporary
        # variable in a variety of calculations.
        
        self.floater = NodePath(PandaNode("floater"))
        self.floater.reparentTo(render)

        # Accept the control keys for movement and rotation

        self.accept("escape", sys.exit)
        self.accept("a", self.setKey, ["left",1])
        self.accept("d", self.setKey, ["right",1])
        self.accept("w", self.setKey, ["forward",1])
        self.accept("s", self.setKey, ["backward",1])
        self.accept("a-up", self.setKey, ["left",0])
        self.accept("d-up", self.setKey, ["right",0])
        self.accept("w-up", self.setKey, ["forward",0])
        self.accept("s-up", self.setKey, ["backward",0])
        self.accept("l", self.playerLights,[])
        
        self.accept("mouse1", self.setKey, ["shoot", 1])
        self.accept("mouse1-up", self.setKey, ["shoot", 0]) #self.shootRocketshootRocket

        taskMgr.add(self.playerMove,"moveTask")
        taskMgr.add(self.enemyMove,"moveTask")
        taskMgr.add(self.shoot,"shootTask")
        taskMgr.add(self.rocketCollision,"rocketCollision")

        # Game state variables
        self.prevtime = 0
        self.isMoving = False
        self.prevShotTime = 0
        self.prevEnemyMoveTime = 0

        # Set up the camera
        
        base.disableMouse()
        base.camera.setPos(self.player.getX(),self.player.getY()+10,2)
        
        # We will detect the height of the terrain by creating a collision
        # ray and casting it downward toward the terrain.  One ray will
        # start above player's head, and the other will start above the camera.
        # A ray may hit the terrain, or it may hit a rock or a tree.  If it
        # hits the terrain, we can detect the height.  If it hits anything
        # else, we rule that the move is illegal.

        self.cTrav = CollisionTraverser()

        self.playerGroundRay = CollisionRay()
        self.playerGroundRay.setOrigin(0,0,1000)
        self.playerGroundRay.setDirection(0,0,-1)
        self.playerGroundCol = CollisionNode('playerRay')
        self.playerGroundCol.addSolid(self.playerGroundRay)
        self.playerGroundCol.setFromCollideMask(BitMask32.bit(3))
        self.playerGroundCol.setIntoCollideMask(BitMask32.allOff())
        self.playerGroundColNp = self.player.attachNewNode(self.playerGroundCol)
        self.playerGroundHandler = CollisionHandlerQueue()
        self.cTrav.addCollider(self.playerGroundColNp, self.playerGroundHandler)

        self.camGroundRay = CollisionRay()
        self.camGroundRay.setOrigin(0,0,1000)
        self.camGroundRay.setDirection(0,0,-1)
        self.camGroundCol = CollisionNode('camRay')
        self.camGroundCol.addSolid(self.camGroundRay)
        self.camGroundCol.setFromCollideMask(BitMask32.bit(3))
        self.camGroundCol.setIntoCollideMask(BitMask32.allOff())
        self.camGroundColNp = base.camera.attachNewNode(self.camGroundCol)
        self.camGroundHandler = CollisionHandlerQueue()
        self.cTrav.addCollider(self.camGroundColNp, self.camGroundHandler)

        # Uncomment this line to see the collision rays
        #self.playerGroundColNp.show()
        #self.camGroundColNp.show()
       
        #Uncomment this line to show a visual representation of the 
        #collisions occuring
        #self.cTrav.showCollisions(render)
        
        #Code for Enemy player
        self.enemyGroundRay = CollisionRay()
        self.enemyGroundRay.setOrigin(0,0,1000)
        self.enemyGroundRay.setDirection(0,0,-1)
        self.enemyGroundCol = CollisionNode('enemyRay')
        self.enemyGroundCol.addSolid(self.enemyGroundRay)
        self.enemyGroundCol.setFromCollideMask(BitMask32.bit(3))
        self.enemyGroundCol.setIntoCollideMask(BitMask32.allOff())
        self.enemyGroundColNp = self.enemy.attachNewNode(self.enemyGroundCol)
        self.enemyGroundHandler = CollisionHandlerQueue()
        self.cTrav.addCollider(self.enemyGroundColNp, self.enemyGroundHandler)
        
        self.cRocketHandler = CollisionHandlerQueue()
        
        self.worldEdge = CollisionInvSphere(0, 0, 0, 50)
        
        cNode = CollisionNode("worldEdge")
        cNode.addSolid(self.worldEdge)
        cNode.setFromCollideMask(BitMask32.allOff())
        cNode.setIntoCollideMask(BitMask32.allOn())
        self.worldEdgeNp=self.environ.attachNewNode(cNode)
        #self.cTrav.addCollider(self.worldEdgeNp, self.cRocketHandler)
        #cNP = render.attachNewNode(cNode)
        
        cNode2 = CollisionNode("wall")
        cNode2.addSolid(CollisionPlane(Plane(Vec3(-1,0,0), Point3(22.5,0,0))))
        cNode2.addSolid(CollisionPlane(Plane(Vec3(1,0,0), Point3(-22.5,0,0))))
        cNode2.addSolid(CollisionPlane(Plane(Vec3(0,-1,0), Point3(0,22.5,0))))
        cNode2.addSolid(CollisionPlane(Plane(Vec3(0,1,0), Point3(0,-22.5,0))))
        cNode2.setFromCollideMask(BitMask32.allOff())
        cNode2.setIntoCollideMask(BitMask32.allOn())
        cNP2=self.environ.attachNewNode(cNode2)
        
        self.picker = CollisionTraverser()            #Make a traverser
        self.pq     = CollisionHandlerQueue()         #Make a handler
        #Make a collision node for our picker ray
        self.pickerNode = CollisionNode('mouseRay')
        #Attach that node to the camera since the ray will need to be positioned
        #relative to it
        self.pickerNP = camera.attachNewNode(self.pickerNode)
        #Everything to be picked will use bit 1. This way if we were doing other
        #collision we could seperate it
        self.pickerNode.setFromCollideMask(BitMask32.allOn())
        self.pickerRay = CollisionRay()               #Make our ray
        self.pickerNode.addSolid(self.pickerRay)      #Add it to the collision node
        #Register the ray as something that can cause collisions
        self.picker.addCollider(self.pickerNP, self.pq)
        
        self.playerrocket = None
        self.enemyrocket = None
        
        self.enemyTurn = 0
        self.enemyDestAng = 180

        
        self.enemyHp = 3
        self.playerHp = 3
        
        #Collisions
        self.setupCollisions()
        
        self.playermoving = False
        
        
        #setup hud
        self.drawHud()
from pandac.PandaModules import CollisionRay
from pandac.PandaModules import CollisionHandlerQueue
from pandac.PandaModules import CollisionTraverser
from pandac.PandaModules import GeomNode
from pandac.PandaModules import LineSegs
from pandac.PandaModules import NodePath
from pandac.PandaModules import Point3
from pandac.PandaModules import Vec3

import math
from math import sqrt

wallRayNP = render.attachNewNode(CollisionNode("wall ray collision node"))
wallRayNP.node().addSolid(CollisionRay(0,0,0,0,1,0))
wallRayNP.node().setIntoCollideMask(BitMask32.allOff())
wallRayNP.node().setFromCollideMask(BitMask32.allOn() & ~GeomNode.getDefaultCollideMask())
wallRayNP.node().setFromCollideMask(wallRayNP.node().getFromCollideMask() & ~BitMask32.bit(1))
#wallRayNP.show()

collisionHandler = CollisionHandlerQueue()
collisionTraverser = CollisionTraverser("pathfinder's collisionTraverser")
collisionTraverser.addCollider(wallRayNP, collisionHandler)
collisionTraverser.setRespectPrevTransform(True)

class PathFinder():
    
##    def __init__(self, position, ID = -1):
##        NodePath.__init__(self, "Waypoint")
##        self.position = position
##        self.texture = loader.loadTexture("textures/blue.jpg")
##        self.costToThisNode = 0