Esempio n. 1
0
    def __init__(self):

        ShowBase.__init__(self)

        model = self.loader.loadModel("/e/models/ralph/ralph.egg")
        model.reparentTo(self.render)
        model.setPos(0, 0, 0)

        posItvl = LerpPosInterval(model,
                                  1,
                                  pos = (1, 0, 0),
                                  )
        hprItvl = LerpHprInterval(model,
                                  1,
                                  hpr = (50, 50, 50))

        posItvl.loop()
        hprItvl.loop()

        self.trackball.node().setPos(0, 10, -2)
Esempio n. 2
0
class Credits:
    def __init__(self):

        self.frameMain = DirectFrame(
            frameSize = (base.a2dLeft, base.a2dRight,
                         base.a2dBottom, base.a2dTop),
            frameColor = (0.05, 0.05, 0.05, 1))
        self.frameMain.setTransparency(1)

        tpBig = TextProperties()
        tpBig.setTextScale(1.5)
        tpSmall = TextProperties()
        tpSmall.setTextScale(0.75)
        tpUs = TextProperties()
        tpUs.setUnderscore(True)
        tpMgr = TextPropertiesManager.getGlobalPtr()
        tpMgr.setProperties("big", tpBig)
        tpMgr.setProperties("small", tpSmall)
        tpMgr.setProperties("us", tpUs)

        creditsText = ""
        with open("credits.txt") as f:
            creditsText = f.read()
        self.lblCredits = DirectLabel(
            text = creditsText,
            text_fg = (1,1,1,1),
            text_bg = (0,0,0,0),
            frameColor = (0,0,0,0),
            text_align = TextNode.ACenter,
            scale = 0.1,
            pos = (0, 0, base.a2dTop - 0.2))
        self.lblCredits.setTransparency(1)
        self.lblCredits.reparentTo(self.frameMain)

        self.creditsScroll = LerpPosInterval(
            self.lblCredits,
            12.0,
            (0, 0, base.a2dTop + 3.5),
            startPos=(0, 0, base.a2dBottom),
            name="CreditsScroll")

        self.btnBack = DirectButton(
            text = "BACK",
            text_fg = (1,1,1,1),
            text_align = TextNode.ALeft,
            scale = 0.1,
            pad = (0.15, 0.15),
            pos = (base.a2dLeft + 0.08, 0, base.a2dBottom + 0.05),
            frameColor = (
                (0.2,0.2,0.2,0.8),
                (0.4,0.4,0.4,0.8),
                (0.4,0.4,0.4,0.8),
                (0.1,0.1,0.1,0.8),
                ),
            relief = 1,
            command = base.messenger.send,
            extraArgs = ["Credits-Back"],
            pressEffect = False,
            rolloverSound = None,
            clickSound = None)
        self.btnBack.setTransparency(1)
        self.btnBack.reparentTo(self.frameMain)

        self.hide()

    def show(self):
        self.frameMain.show()
        self.creditsScroll.loop()

    def hide(self):
        self.frameMain.hide()
        self.creditsScroll.finish()
Esempio n. 3
0
class Credits:
    def __init__(self):

        self.frameMain = DirectFrame(frameSize=(base.a2dLeft, base.a2dRight,
                                                base.a2dBottom, base.a2dTop),
                                     frameColor=(0.05, 0.05, 0.05, 1))
        self.frameMain.setTransparency(1)

        tpBig = TextProperties()
        tpBig.setTextScale(1.5)
        tpSmall = TextProperties()
        tpSmall.setTextScale(0.75)
        tpUs = TextProperties()
        tpUs.setUnderscore(True)
        tpMgr = TextPropertiesManager.getGlobalPtr()
        tpMgr.setProperties("big", tpBig)
        tpMgr.setProperties("small", tpSmall)
        tpMgr.setProperties("us", tpUs)

        creditsText = ""
        with open("credits.txt") as f:
            creditsText = f.read()
        self.lblCredits = DirectLabel(text=creditsText,
                                      text_fg=(1, 1, 1, 1),
                                      text_bg=(0, 0, 0, 0),
                                      frameColor=(0, 0, 0, 0),
                                      text_align=TextNode.ACenter,
                                      scale=0.1,
                                      pos=(0, 0, base.a2dTop - 0.2))
        self.lblCredits.setTransparency(1)
        self.lblCredits.reparentTo(self.frameMain)

        self.creditsScroll = LerpPosInterval(self.lblCredits,
                                             12.0, (0, 0, base.a2dTop + 3.5),
                                             startPos=(0, 0, base.a2dBottom),
                                             name="CreditsScroll")

        self.btnBack = DirectButton(text="BACK",
                                    text_fg=(1, 1, 1, 1),
                                    text_align=TextNode.ALeft,
                                    scale=0.1,
                                    pad=(0.15, 0.15),
                                    pos=(base.a2dLeft + 0.08, 0,
                                         base.a2dBottom + 0.05),
                                    frameColor=(
                                        (0.2, 0.2, 0.2, 0.8),
                                        (0.4, 0.4, 0.4, 0.8),
                                        (0.4, 0.4, 0.4, 0.8),
                                        (0.1, 0.1, 0.1, 0.8),
                                    ),
                                    relief=1,
                                    command=base.messenger.send,
                                    extraArgs=["Credits-Back"],
                                    pressEffect=False,
                                    rolloverSound=None,
                                    clickSound=None)
        self.btnBack.setTransparency(1)
        self.btnBack.reparentTo(self.frameMain)

        self.hide()

    def show(self):
        self.frameMain.show()
        self.creditsScroll.loop()

    def hide(self):
        self.frameMain.hide()
        self.creditsScroll.finish()
Esempio n. 4
0
class World(DirectObject):
	
	def cameraControl(self, task):
		if(self.keyMap["firstPerson"]==0 and self.keyMap["ThirdPerson"]!=0):
			return task.cont
		dt = globalClock.getDt()
		if(dt > .20):
		   return task.cont
		    
		if(base.mouseWatcherNode.hasMouse() == 1):
		   mpos = base.mouseWatcherNode.getMouse()
		   base.camera.setP(mpos.getY() * 30)
		   base.camera.setH(mpos.getX() * -50)
		   if (mpos.getX() < 0.1 and mpos.getX() > -0.1 ):
		      self.sonic.setH(self.sonic.getH())
		   else:
		      self.sonic.setH(self.sonic.getH() + mpos.getX() * -1)
		   
		if(self.keyMap["w"] == 1):
		   self.sonic.setY(self.sonic, 15 * dt)
		   print("camera moving forward")
		   return task.cont
		elif(self.keyMap["s"] == 1):
		   self.sonic.setY(self.sonic, -15 * dt)
		   print("camera moving backwards")
		   return task.cont
		elif(self.keyMap["a"] == 1):
		   self.sonic.setX(self.sonic, -10 * dt)
		   print("camera moving left")
		   return task.cont
		elif(self.keyMap["d"] == 1):
		   self.sonic.setX(self.sonic, 10 * dt)
		   print("camera moving right")
		   return task.cont
		else:
		   return task.cont

	def __init__(self):
		self.keyMap = {"left":0, "right":0, "forward":0,"backward":0, "cam-left":0, "cam-right":0,"res":0,
		"w" : 0, "s" : 0, "a" : 0, "d" : 0,"firstPerson":0,"ThirdPerson":1,"l":0}
		base.win.setClearColor(Vec4(0,0,0,1))
		wp = WindowProperties()
		wp.setFullscreen(1)
		wp.setSize(1024,768)
		base.openMainWindow()
		base.win.requestProperties(wp)
		base.graphicsEngine.openWindows()
		#Post the instructions
		
		#Intro Starts
		tex = MovieTexture("name")
		assert tex.read("models/play/entrance.avi"), "Failed to load video!"
		cm = CardMaker("My Fullscreen Card");
		cm.setFrameFullscreenQuad()
		cm.setUvRange(tex)
		card = NodePath(cm.generate())
		card.reparentTo(render2d)
		card.setTexture(tex)
		card.setTexScale(TextureStage.getDefault(), tex.getTexScale())
		sound=loader.loadSfx("models/play/entrance.avi")
		tex.synchronizeTo(sound)
		tex.setLoop(False)
		sound.play()
		def myTask(task):
			if (int(tex.getTime()) >=14):
				print "Stoping"
				card.remove()
				return task.done
			return task.cont
		taskMgr.add(myTask, "Task")
		
		mytimer = DirectLabel()
		mytimer.reparentTo(render)
		#mytimer.setY(0)
		textObject = OnscreenText(text = "", pos = (0.95,-0.95), 
scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1)

		def dCharstr(theString):
			if len(theString) != 2:
				theString = '0' + theString
				return theString
	    
		


		def timerTask(task):
			secondsTime = int(task.time)
			minutesTime = int(secondsTime/60)
			hoursTime = int(minutesTime/60)
			mytimer['text'] = "%02d:%02d:%02d" % (hoursTime, minutesTime%60, secondsTime%60)
			#print mytimer['text']
			textObject.setText(mytimer['text'])
			return task.cont

		taskMgr.add(timerTask, 'timerTask')
		mytimer.reparentTo(render)
		
		self.inst1 = addInstructions(0.95, "[ESC]: Quit")
		self.inst2 = addInstructions(0.90, "[L]: Map View")
		self.inst3 = addInstructions(0.85, "Movement: Arrow Keys")
		self.inst2 = addInstructions(0.80, "[R]: Reset Position")

		self.road = loader.loadModel("models/floor")
		
		emin,emax =self.road.getTightBounds()
		env = []
		esize=20
		for en in range(0,esize):
			for j in range(0,esize):
				#if (j%2==0):
				#print j+(en*9),"Here"
				env.append(self.road)
				env[j+(en*9)].copyTo(render)
				env[j+(en*9)].setPos(emin.x*(en-esize/2),emax.y*(j-esize/2),0)
		
		self.BuildingRow = [loader.loadModel("models/BuildingCluster1col"),
					loader.loadModel("models/BuildingCluster2col"),
					loader.loadModel("models/BuildingCluster3col"),
					loader.loadModel("models/BuildingCluster4col")]

		e0,e1=env[0].getTightBounds()
		mapsize=e0.x*len(env)
		self.vehicle_carsx=loader.loadModel("models/vehicles/carnsxcol")
		self.sign=Actor("models/squarrow-model",{
                        "play":"models/squarrow-anim"})
		self.sign1=Actor("models/squarrow-model",{
                        "play":"models/squarrow-anim"})
		self.vehicle_ford=loader.loadModel("models/vehicles/fordcol")
		self.vehicle_girlcar=loader.loadModel("models/vehicles/girlcarcol")
		self.vehicle_policecar=loader.loadModel("models/vehicles/policecarcol")
		self.vehicle_fireengine=loader.loadModel("models/vehicles/fireenginecol")
		self.vehicle_carsx.reparentTo(render)
		self.sign.reparentTo(render)
		self.sign1.reparentTo(render)
		self.vehicle_carsx.setPos(-35,295,0)
		self.vehicle_carsx.setScale(5)
		self.vehicle_ford.reparentTo(render)
		self.vehicle_ford.setPos(52,270,0)
		self.vehicle_ford.setScale(3)
		self.vehicle_girlcar.reparentTo(render)
		self.vehicle_girlcar.setPos(200,20,0)
		self.vehicle_girlcar.setScale(5)
		self.vehicle_girlcar.setH(-90)
		self.vehicle_policecar.reparentTo(render)
		self.vehicle_policecar.setPos(-33,295,0)
		self.vehicle_policecar.setScale(3)
		self.vehicle_fireengine.reparentTo(render)
		self.vehicle_fireengine.setPos(-60,-294,0)
		self.vehicle_fireengine.setH(90)
		self.vehicle_fireengine.setScale(3)
		self.sign1.setPos(-129,-44,150)
		self.sign.setPos(89,172.6,150)
                self.sign1.setHpr(-90,0,60)
                self.sign.setHpr(-90,0,60)
		self.sign1.loop("play")
		self.sign.loop("play")
		self.vehicle_carsxinterval=LerpPosInterval(self.vehicle_carsx, 10,Vec3(-33,-325,0) ,Vec3(52,295,0))
		self.vehicle_carsxinterval.loop()
		self.vehicle_fordinterval=LerpPosInterval(self.vehicle_ford, 10,Vec3(52,-325,0) ,Vec3(52,270,0))
		self.vehicle_fordinterval.loop()
		self.vehicle_policecarinterval=LerpPosInterval(self.vehicle_policecar, 10,Vec3(-33,295,0) ,Vec3(-33,-325,0))
		self.vehicle_policecarinterval.loop()
		self.vehicle_fireengineinterval=LerpPosInterval(self.vehicle_fireengine, 10,Vec3(52,270,0) ,Vec3(52,-350,0))
		self.vehicle_girlcar=LerpPosInterval(self.vehicle_girlcar,10,Vec3(-54,33,6),Vec3(-258,33,6))
		self.vehicle_girlcar.loop()
		
		for j in self.BuildingRow:
			j.setPos(e0.x,e1.y,0)
		
		building=[]
		for j in range(0,8):
			building.append(self.BuildingRow)
			offset=0
			c=env[0].getX()
			x=e0.x
			y=e1.y+(emin.x*4*j);
			for i in building[j]:
				x=x-emin.x
				i.copyTo(render)
				min,max =i.getTightBounds()
				width=max-min
				i.setPos(x,y,0)
				x=x-emin.x
				i.copyTo(render)
				i.setPos(-x+50,y,0)
		
							
		# Create the main character, Ralph
		sonicStartPos = (0,0,-2)
		self.sonic = Actor("models/people/sonic/sonic",{
			"board":"models/people/sonic/sonic-board",
			"fallingwboard":"models/people/sonic/sonic-fallingwboard",
			"fallingwoboard":"models/people/sonic/sonic-fallingwoboard",
			"run":"models/people/sonic/sonic-run",
			"win":"models/people/sonic/sonic-win",
			})
		self.sonic.reparentTo(render)
		self.sonic.setScale(.5)
		self.sonic.setPos(sonicStartPos)
		
		# 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("arrow_left", self.setKey, ["left",1])
		self.accept("arrow_right", self.setKey, ["right",1])
		self.accept("arrow_up", self.setKey, ["forward",1])
		self.accept("arrow_down", self.setKey, ["backward",1])
		self.accept("arrow_left-up", self.setKey, ["left",0])
		self.accept("arrow_right-up", self.setKey, ["right",0])
		self.accept("arrow_up-up", self.setKey, ["forward",0])
		self.accept("arrow_down-up", self.setKey, ["backward",0])

		self.accept("z", self.setKey, ["cam-left",1])
		self.accept("x", self.setKey, ["cam-right",1])
		self.accept("z-up", self.setKey, ["cam-left",0])
		self.accept("x-up", self.setKey, ["cam-right",0])
		self.accept("l", self.setKey, ["l", 1])
		self.accept("l-up", self.setKey, ["l", 0])
		self.accept("w", self.setKey, ["w", 1])
		self.accept("s", self.setKey, ["s", 1])   
		self.accept("a", self.setKey, ["a", 1])   
		self.accept("d", self.setKey, ["d", 1])
		self.accept("r", self.setKey, ["res", 1])
		self.accept("w-up", self.setKey, ["w", 0])
		self.accept("s-up", self.setKey, ["s", 0])
		self.accept("a-up", self.setKey, ["a", 0])
		self.accept("d-up", self.setKey, ["d", 0])

		self.accept("j", self.setKey, ["firstPerson",1])
		self.accept("j", self.setKey, ["ThirdPerson",0])
		self.accept("k", self.setKey, ["firstPerson",0])
		self.accept("k", self.setKey, ["ThirdPerson",1])
		
		

		# taskMgr.add(self.cameraControl, "Camera Control")
		taskMgr.add(self.move,"moveTask")

		# Game state variables
		self.isMoving = False

		# Set up the camera
		
		#base.disableMouse()
		base.camera.setPos(self.sonic.getX(),self.sonic.getY()-10,40)
		# base.camera.setH(-90)
		self.cTrav = CollisionTraverser()

		self.sonicGroundRay = CollisionRay()
		self.sonicGroundRay.setOrigin(0,0,1000)
		self.sonicGroundRay.setDirection(0,0,-1)
		self.sonicGroundCol = CollisionNode('sonicRay')
		self.sonicGroundCol.addSolid(self.sonicGroundRay)
		self.sonicGroundCol.setFromCollideMask(BitMask32.bit(0))
		self.sonicGroundCol.setIntoCollideMask(BitMask32.allOff())
		self.sonicGroundColNp = self.sonic.attachNewNode(self.sonicGroundCol)
		self.sonicGroundHandler = CollisionHandlerQueue()
		self.cTrav.addCollider(self.sonicGroundColNp, self.sonicGroundHandler)

		# Uncomment this line to see the collision rays
		#self.sonicGroundColNp.show()
		#self.camGroundColNp.show()
	   
		# Uncomment this line to show a visual representation of the 
		# collisions occuring
		#self.cTrav.showCollisions(render)
		
		# Create some lighting
		ambientLight = AmbientLight("ambientLight")
		ambientLight.setColor(Vec4(.3, .3, .3, 1))
		directionalLight = DirectionalLight("dlight")
		directionalLight.setDirection(Vec3(0,-5, -5))
		directionalLight.setColor(Vec4(1, 1, 1, 1))
		#directionalLight.setHpr(0, -60, 0)
		directionalLight.setSpecularColor(Vec4(1, 1, 1, 1))
		ml=render.attachNewNode(directionalLight)
		#self.mylight= render.attachNewNode("dl")
		inter=Func(light,directionalLight)
		#directionalLight.reparentTo(self.mylight)
		#print dir(inter)
		inter.start()
		inter.loop()
		render.setLight(render.attachNewNode(ambientLight))
		render.setLight(ml)

		
	#Records the state of the arrow keys
	def setKey(self, key, value):
		self.keyMap[key] = value
	
	# Accepts arrow keys to move either the player or the menu cursor,
	# Also deals with grid checking and collision detection
	def move(self, task):

		# If the camera-left key is pressed, move camera left.
		# If the camera-right key is pressed, move camera right.

		base.camera.lookAt(self.sonic)
		if (self.keyMap["cam-left"]!=0):
			print "z"
			base.camera.setX(base.camera, -20 * globalClock.getDt())
		if (self.keyMap["cam-right"]!=0):
			print "x"
			base.camera.setX(base.camera, +20 * globalClock.getDt())

		if (self.keyMap["res"]==1):
			self.sonic.setPos(0,0,-2)
			self.keyMap["res"]=0


		startpos = self.sonic.getPos()

		if (self.keyMap["left"]!=0):
			self.sonic.setH(self.sonic.getH() + 300 * globalClock.getDt())
		if (self.keyMap["right"]!=0):
			self.sonic.setH(self.sonic.getH() - 300 * globalClock.getDt())
		if (self.keyMap["forward"]!=0):
			self.sonic.setY(self.sonic, -50 * globalClock.getDt())
		if (self.keyMap["backward"]!=0):
			self.sonic.setY(self.sonic, +50 * globalClock.getDt())

		if (self.keyMap["forward"]!=0) and (self.keyMap["backward"]==0):
			if self.isMoving is False:
				self.sonic.loop("board")
				self.isMoving = True

		elif (self.keyMap["backward"]!=0) and (self.keyMap["forward"]==0):
			if self.isMoving is False:
				self.sonic.loop("board")
				self.isMoving = True
				
		elif (self.keyMap["backward"]==0) and (self.keyMap["forward"]==0):
			if self.isMoving:
				self.sonic.stop()
				self.sonic.pose("run",5)
				print self.sonic.getX(),self.sonic.getY(),self.sonic.getZ()
				self.isMoving = False
		

		# If the camera is too far from ralph, move it closer.
		# If the camera is too close to ralph, move it farther.

		camvec = self.sonic.getPos() - base.camera.getPos()
		camvec.setZ(15)
		camdist = camvec.length()
		camvec.normalize()
		if (camdist > 10.0):
			base.camera.setPos(base.camera.getPos() + camvec*(camdist-10))
			camdist = 10.0
		if (camdist < 5.0):
			base.camera.setPos(base.camera.getPos() - camvec*(5-camdist))
			camdist = 5.0

		# Now check for collisions.

		self.cTrav.traverse(render)

		entries = []
		for i in range(self.sonicGroundHandler.getNumEntries()):
			entry = self.sonicGroundHandler.getEntry(i)
			entries.append(entry)
		entries.sort(lambda x,y: cmp(y.getSurfacePoint(render).getZ(),
									 x.getSurfacePoint(render).getZ()))
		if (len(entries)>0) and (entries[0].getIntoNode().getName() == "BuildingCluster1"):
			self.sonic.setPos(startpos)
			self.isMoving = False
		elif (len(entries)>0) and (entries[0].getIntoNode().getName() == "BuildingCluster2"):
			self.sonic.setPos(startpos)
			self.isMoving = False
		elif (len(entries)>0) and (entries[0].getIntoNode().getName() == "BuildingCluster4"):
			self.sonic.setPos(startpos)
			self.isMoving = False
		elif (len(entries)>0) and (entries[0].getIntoNode().getName() == "BuildingCluster5"):
			self.sonic.setPos(startpos)
			self.isMoving = False
		elif (len(entries)>0):
			print entries[0].getIntoNode().getName(),self.sonic.getPos()
			if(entries[0].getIntoNode().getName()=="parked_car" or entries[0].getIntoNode().getName()=="body"):
				self.sonic.setY(self.sonic.getY()-50)
				self.sonic.setX(self.sonic.getX()-5)
			elif(entries[0].getIntoNode().getName()=="PoliceCar"):
				self.sonic.setY(self.sonic.getY()+50)
				self.sonic.setX(self.sonic.getX()-5)
			elif(entries[0].getIntoNode().getName()=="girlRacer"):
				self.sonic.setX(self.sonic.getX()+50)
				self.sonic.setY(self.sonic.getY()+5)
			elif(entries[0].getIntoNode().getName()=="building1"):
				if(abs(abs(self.sonic.getX())-130)<10 and abs(abs(self.sonic.getY())-44)<10):
					print "Pizza Delivery"
					#Intro Starts
					tex = MovieTexture("name")
					assert tex.read("models/play/happy.mp4"), "Failed to load video!"
					cm = CardMaker("My Fullscreen Card");
					cm.setFrameFullscreenQuad()
					cm.setUvRange(tex)
					card = NodePath(cm.generate())
					card.reparentTo(render2d)
					card.setTexture(tex)
					card.setTexScale(TextureStage.getDefault(), tex.getTexScale())
					sound=loader.loadSfx("models/play/happy.mp4")
					tex.synchronizeTo(sound)
					tex.setLoop(False)
					sound.play()
					def myTask(task):
						if (int(tex.getTime()) >=20):
					 		print "Stoping"
							c=0
					 		card.remove()
					 		self.sonic.setPos(0,0,-2)
							self.keyMap["res"]=0
							myscore = DirectLabel()
							myscore.reparentTo(render)
							#mytimer.setY(0)
							textObj = OnscreenText(text = "", pos = (0.95,0.95), 
							scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1)
							c=c+1
							myscore['text'] = "Score:"+"1"
							#print mytimer['text']
							textObj.setText(myscore['text'])
							return task.done
							#if myMovieTexture.getTime() == myMovieLength:
							#	print "movie puri"
					 	return task.cont
					taskMgr.add(myTask, "Task")
					

				elif(abs(abs(self.sonic.getX())-88)<10 and abs(abs(self.sonic.getY())-172)<10):
					print "Pizza Delivery"
					#Intro Starts
					tex = MovieTexture("name")
					assert tex.read("models/play/angry.mp4"), "Failed to load video!"
					cm = CardMaker("My Fullscreen Card");
					cm.setFrameFullscreenQuad()
					cm.setUvRange(tex)
					card = NodePath(cm.generate())
					card.reparentTo(render2d)
					card.setTexture(tex)
					card.setTexScale(TextureStage.getDefault(), tex.getTexScale())
					sound=loader.loadSfx("models/play/angry.mp4")
					tex.synchronizeTo(sound)
					tex.setLoop(False)
					sound.play()
					def myTask(task):
					 	if (int(tex.getTime()) >=20):
					 		print "Stoping"
							c=0
					 		card.remove()
					 		self.sonic.setPos(0,0,-2)
							self.keyMap["res"]=0
							myscore = DirectLabel()
							myscore.reparentTo(render)
							#mytimer.setY(0)
							textObj = OnscreenText(text = "", pos = (0.95,0.95), 
							scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1)
							c=c+1
							myscore['text'] = "Score:"+"2"
							#print mytimer['text']
							textObj.setText(myscore['text'])
							return task.done
							#if myMovieTexture.getTime() == myMovieLength:
							#	print "movie puri"
					 	return task.cont
					taskMgr.add(myTask, "Task")

			#self.sonic.setPos(startpos)

		# Keep the camera at one foot above the terrain,
		# or two feet above ralph, whichever is greater.
		
		'''entries = []
		for i in range(self.camGroundHandler.getNumEntries()):
				entry = self.camGroundHandler.getEntry(i)
				entries.append(entry)
		entries.sort(lambda x,y: cmp(y.getSurfacePoint(render).getZ(),
																 x.getSurfacePoint(render).getZ()))
		if (len(entries)>0) and (entries[0].getIntoNode().getName() == "BuildingCluster1"):
				base.camera.setZ(entries[0].getSurfacePoint(render).getZ()+1.0)
		if (base.camera.getZ() < self.sonic.getZ() + 2.0):
				base.camera.setZ(self.sonic.getZ() + 2.0)'''

		# The camera should look in ralph's direction,
		# but it should also try to stay horizontal, so look at
		# a floater which hovers above ralph's head.
		
		base.camera.setPos(self.sonic.getPos())
		base.camera.setY(self.sonic.getY()+50*cos(self.sonic.getH()*pi/180))
		base.camera.setX(self.sonic.getX()-50*sin(self.sonic.getH()*pi/180))
		base.camera.setZ(self.sonic.getZ() + 15.0)
		if(self.keyMap["l"]==1):
			base.camera.setZ(self.sonic.getZ() + 1000.0)	
		sa =self.sonic.getPos();
		base.camera.lookAt(sa.x,sa.y,sa.z+15)
		

		# self.floater.setPos(self.sonic.getX()-4, self.floater.getY()-4, 5)
		# base.camera.setY(-base.camera.getY())
		# self.floater.setX(self.sonic.getX()-10)
		# base.camera.reparentTo(self.sonic)
		# self.floater.setH(180)
		# base.camera.setZ(+50)
		# base.camera.lookAt(self.floater)

		return task.cont