Beispiel #1
0
class Car():
    """This is a car."""
    def __init__ (self, x=0, y=0, h=0):
        self.model = Actor("models/panda-model")
        self.model.reparentTo(render)
        self.model.setScale(.005)
        
        #things that matter
        self.model.setPos(x, y, 0)
        self.model.setH(h)
        self.vel = Velocity()
        self.hp = 100
        self.input = [False for i in range(5)]#left, right, up, down, space
        
        #taskMgr.add(self.move, "outtaThaWayImDrivingHere")
        #self.prevtime = 0
        
    def move(self, elapsed):
        #elapsed = task.time - self.prevtime
        
        #all these numbers need to be tested
        if self.input[0]:#left
            self.model.setH(self.model.getH() + elapsed * 200)#maybe multiply by speed?
        if self.input[1]:#right
            self.model.setH(self.model.getH() - elapsed * 200)
        if self.input[2]:#up
            self.vel.addDM(self.model.getH(), elapsed * 5)
            self.vel.setDM(self.vel.getD(), min(self.vel.getM(), 2))#speed cap
        if self.input[3]:#down
            self.vel.addDM(self.model.getH(), elapsed * -55)
            self.vel.setDM(self.vel.getD(), min(self.vel.getM(), 2))#speed cap
        self.vel.setDM(self.vel.getD(), self.vel.getM()*(1-.02-.18*self.input[4]))#friction
            
        self.model.setPos(self.model.getX() + self.vel.x, self.model.getY() + self.vel.y, 0)
        
        #self.prevtime = task.time
        #return Task.cont
Beispiel #2
0
class Car():
    """This is a car."""
    def __init__ (self, x=0, y=0, h=0, car=0):
        #mydir = os.path.abspath(sys.path[0])
        #mydir = Filename.fromOsSpecific(mydir).getFullpath()
        if car == 0:
            self.model = loader.loadModel("cars/bluecar.egg")
        elif car == 1:
            self.model = loader.loadModel("cars/redcar.egg")
        elif car == 2:
            self.model = loader.loadModel("cars/greencar.egg")
        else:
            self.model = loader.loadModel("cars/yellowcar.egg")
        #self.model = Actor("models/panda-model")
        self.model.reparentTo(render)
        #self.model.setScale(.005)
        self.model.setScale(5.7)
        
        #things that matter
        self.model.setPos(x, y, 0)
        self.model.setH(h)
        self.vel = Velocity()
        self.turn = 0
        self.hp = 100
        self.deaths = 0
        self.input = [False for i in range(5)]#left, right, up, down, space

        #Attach Smoke
        self.s1 = False
        self.s2 = False
        self.s3 = False
        self.smoke1 = smoke_emitter(self.model, 1, 1, 1)
        self.smoke2 = smoke_emitter(self.model, -1, 0, 1)
        self.smoke3 = smoke_emitter(self.model, 0, 1, 0)
        
        
        
        #taskMgr.add(self.move, "outtaThaWayImDrivingHere")
        #self.prevtime = 0
        
        self.setUpHeadlights()
    
    def makeCollisionSolid(self, cTrav, cHandler, num):
        cSphere = CollisionSphere((0,0,0), 3)
        cNode = CollisionNode("car%d"%num)
        cNode.addSolid(cSphere)
        cNodePath = self.model.attachNewNode(cNode)
        #cNodePath.show()
        #registers a from object with the traverser with a corresponding handler
        cTrav.addCollider(cNodePath, cHandler)
    
    def setUpHeadlights(self):
        self.headlights = Spotlight("headlights")
        self.headlights.setColor(VBase4(1.2, 1.2, 1.2, 1))
        #self.headlights.setShadowCaster(True, 512, 512)
        self.headlights.setAttenuation(Point3(0.0001, 0, 0.00001))
        print self.headlights.getAttenuation().getX()
        print self.headlights.getAttenuation().getY()
        print self.headlights.getAttenuation().getZ()
        lens = PerspectiveLens()
        lens.setFov(70, 90)
        lens.setNear(2.0)
        self.headlights.setLens(lens)
        slnp = self.model.attachNewNode(self.headlights)
        slnp.setPos(0, -0.35, 1)
        slnp.setHpr(0,-2.5,0)
        render.setLight(slnp)
        self.overlights = DirectionalLight("overhead lights")
        self.overlights.setColor(VBase4(1, 1, 1, 1))
        oslnp = self.model.attachNewNode(self.overlights)
        oslnp.setHpr(180,-75,0)
        self.model.setLight(oslnp)
        self.lightsOn = True
    
    def toggleHeadlights(self):
        if self.lightsOn:
            self.headlights.setColor(VBase4(0, 0, 0, 1))
            self.overlights.setColor(VBase4(0, 0, 0, 1))
            self.lightsOn = False
        else:
            self.headlights.setColor(VBase4(1.2, 1.2, 1.2, 1))
            self.overlights.setColor(VBase4(1, 1, 1, 1))
            self.lightsOn = True
    
    def setHeadlights(self, val):
        if val != self.lightsOn:
            if self.lightsOn:
                self.headlights.setColor(VBase4(0, 0, 0, 1))
                self.overlights.setColor(VBase4(0, 0, 0, 1))
                self.lightsOn = False
            else:
                self.headlights.setColor(VBase4(1, 1, 1, 1))
                self.overlights.setColor(VBase4(1, 1, 1, 1))
                self.lightsOn = True
                
    def takeDamage(self, num):
        self.hp -= num
    
    def move(self, elapsed):
        #all these numbers need to be tested
        if self.hp < 25 and not self.s3:
            self.smoke3.p.show()
            self.s3 = True
        if self.hp < 50 and not self.s2:
            self.smoke2.p.show()
            self.s2 = True
        if self.hp < 75 and not self.s1:
            self.smoke1.p.show()
            self.s1 = True
        
        #position change
        self.model.setPos(self.model.getX() + self.vel.x * elapsed/.02, self.model.getY() + self.vel.y * elapsed/.02, 0)
        tempmag = self.vel.getM()
        self.vel.addDM(self.model.getH(), elapsed * 1)
        self.vel.setDM(self.vel.getD(), tempmag)
        if self.vel.getM() > 0:
            self.vel.setDM(self.vel.getD(), max(self.vel.getM() - (elapsed * (.5 + 2.5*self.input[4])),0))
        if self.input[2]:#up
            self.vel.addDM(self.model.getH(), elapsed * 4)
            self.vel.setDM(self.vel.getD(), min(self.vel.getM(), 5))#speed cap
        if self.input[3]:#down
            self.vel.addDM(self.model.getH(), elapsed * -4)
            self.vel.setDM(self.vel.getD(), min(self.vel.getM(), 5))#speed cap
        
        #turning
        self.model.setH(self.model.getH() + self.turn * elapsed/.02)
        if self.input[0]:#left
            self.turn += elapsed * (100 + self.vel.getM()*100/4) / 4
            self.turn = min(.02 * (100 + self.vel.getM()*100/4), self.turn)
            #self.model.setH(self.model.getH() + elapsed * (100 + self.vel.getM()*100/4))
        elif self.input[1]:#right
            self.turn -= elapsed * (100 + self.vel.getM()*100/4) / 4
            self.turn = max(-.02 * (100 + self.vel.getM()*100/4), self.turn)
            #self.model.setH(self.model.getH() - elapsed * (100 + self.vel.getM()*100/4))
        else:
            self.turn -= math.copysign(elapsed, self.turn) * (100 + self.vel.getM()*100/4) / 4
            if abs(self.turn) <= (elapsed * (100 + self.vel.getM()*100/4) / 4):
                self.turn = 0