def positionCamera(self):
		carRepresentation=self.getCameraCar()

		lookAtSegment=carRepresentation.getSegmentPosition()+1
		if lookAtSegment>float(len(self.segments)-1):
			lookAtSegment=lookAtSegment-float(len(self.segments))

		carWorldPosition=TrackGeometry.getWorldPositionByTrackPosition(self.segments,
																			carRepresentation.getSegmentPosition(),
			  																carRepresentation.getSidewaysPosition())

		carBearingPosition=TrackGeometry.getWorldPositionByTrackPosition(self.segments,
																			lookAtSegment,
			  																carRepresentation.getSidewaysPosition())

		cameraSegmentPosition=carRepresentation.getSegmentPosition()-2.5
		if cameraSegmentPosition<0:
			cameraSegmentPosition=cameraSegmentPosition+len(self.segments)

		cameraWorldPosition=TrackGeometry.getWorldPositionByTrackPosition(self.segments,
																			cameraSegmentPosition,
			  																carRepresentation.getSidewaysPosition())

		base.camera.setPos(cameraWorldPosition["xpos"],cameraWorldPosition["ypos"],0.5)
		base.camera.lookAt(carWorldPosition["xpos"],carWorldPosition["ypos"],0.5);

		cameraVectorX=carWorldPosition["xpos"]-cameraWorldPosition["xpos"]
		cameraVectorY=carWorldPosition["ypos"]-cameraWorldPosition["ypos"]
		cameraDegreesRotation=self.convertVectorToDegreesRotation(Geometry.Point(cameraVectorX,cameraVectorY))
		self.visualTrackSession.setCameraDegreesRotationHint(cameraDegreesRotation)
Beispiel #2
0
    def positionCamera(self):
        carRepresentation = self.getCameraCar()

        lookAtSegment = carRepresentation.getSegmentPosition() + 1
        if lookAtSegment > float(len(self.segments) - 1):
            lookAtSegment = lookAtSegment - float(len(self.segments))

        carWorldPosition = TrackGeometry.getWorldPositionByTrackPosition(
            self.segments, carRepresentation.getSegmentPosition(),
            carRepresentation.getSidewaysPosition())

        carBearingPosition = TrackGeometry.getWorldPositionByTrackPosition(
            self.segments, lookAtSegment,
            carRepresentation.getSidewaysPosition())

        cameraSegmentPosition = carRepresentation.getSegmentPosition() - 2.5
        if cameraSegmentPosition < 0:
            cameraSegmentPosition = cameraSegmentPosition + len(self.segments)

        cameraWorldPosition = TrackGeometry.getWorldPositionByTrackPosition(
            self.segments, cameraSegmentPosition,
            carRepresentation.getSidewaysPosition())

        base.camera.setPos(cameraWorldPosition["xpos"],
                           cameraWorldPosition["ypos"], 0.5)
        base.camera.lookAt(carWorldPosition["xpos"], carWorldPosition["ypos"],
                           0.5)

        cameraVectorX = carWorldPosition["xpos"] - cameraWorldPosition["xpos"]
        cameraVectorY = carWorldPosition["ypos"] - cameraWorldPosition["ypos"]
        cameraDegreesRotation = self.convertVectorToDegreesRotation(
            Geometry.Point(cameraVectorX, cameraVectorY))
        self.visualTrackSession.setCameraDegreesRotationHint(
            cameraDegreesRotation)
	def addPuddle(self,percentDistance,trackSide):
		segmentIndex=int(float(len(self.segments))/100*percentDistance)
		if trackSide=='left':
			sidewaysPosition=-0.4
		else:
			sidewaysPosition=0.4

		currentSegmentVector=self.segments[segmentIndex].getVector()

		rotation=self.convertVectorToDegreesRotation(currentSegmentVector)+270.0
		if rotation>360.0:
			rotation=rotation-360.0

		worldPosition=TrackGeometry.getWorldPositionByTrackPosition(self.segments,segmentIndex,sidewaysPosition)
		self.visualTrackSession.addPuddle(worldPosition['xpos'],worldPosition['ypos'],rotation)
		self.puddlePositions.append({ 'sidewaysposition': sidewaysPosition, 'segment': float(segmentIndex) })
Beispiel #4
0
    def addPuddle(self, percentDistance, trackSide):
        segmentIndex = int(float(len(self.segments)) / 100 * percentDistance)
        if trackSide == 'left':
            sidewaysPosition = -0.4
        else:
            sidewaysPosition = 0.4

        currentSegmentVector = self.segments[segmentIndex].getVector()

        rotation = self.convertVectorToDegreesRotation(
            currentSegmentVector) + 270.0
        if rotation > 360.0:
            rotation = rotation - 360.0

        worldPosition = TrackGeometry.getWorldPositionByTrackPosition(
            self.segments, segmentIndex, sidewaysPosition)
        self.visualTrackSession.addPuddle(worldPosition['xpos'],
                                          worldPosition['ypos'], rotation)
        self.puddlePositions.append({
            'sidewaysposition': sidewaysPosition,
            'segment': float(segmentIndex)
        })
	def advanceCars(self):
		soundServer=SoundServer.getInstance()

		for carRepresentation in self.logicalCarRepresentations:

			carRepresentation.move()

			carWorldPosition=TrackGeometry.getWorldPositionByTrackPosition(self.getSegments(),
																			carRepresentation.getSegmentPosition(),
			  																carRepresentation.getSidewaysPosition())
	
			carRepresentation.getVisualPeer().setPos(carWorldPosition["xpos"],carWorldPosition["ypos"],0)

			currentSegmentComponents=math.modf(carRepresentation.getSegmentPosition())
			distanceThroughCurrentSegment=currentSegmentComponents[0]

			currentSegmentIndex=int(math.floor(carRepresentation.getSegmentPosition()))
			nextSegmentIndex=currentSegmentIndex+1
			if nextSegmentIndex>len(self.segments)-1:
				nextSegmentIndex=nextSegmentIndex-len(self.segments)

			currentSegmentVector=self.segments[currentSegmentIndex].getVector()
			nextSegmentVector=self.segments[nextSegmentIndex].getVector()
			interpolatedX=currentSegmentVector.getX()+(nextSegmentVector.getX()-currentSegmentVector.getX())*distanceThroughCurrentSegment
			interpolatedY=currentSegmentVector.getY()+(nextSegmentVector.getY()-currentSegmentVector.getY())*distanceThroughCurrentSegment
			
			heading=self.convertVectorToDegreesRotation(Geometry.Point(interpolatedX,interpolatedY))
			heading=heading+270.0
			if heading>360.0:
				heading=heading-360.0

			if carRepresentation is self.getPlayerCar():
				pitch=carRepresentation.getEngine().getRevs()/6000+0.4

				SoundServer.getInstance().setEnginePitch(carRepresentation.getCarNumber(),pitch)

				heading=heading-(float)(carRepresentation.getSteering())*20
				if heading>360:
					heading=heading-360
				elif heading<0:
					heading=heading+360
			else:
				pitch=carRepresentation.getSpeed()*2+0.4
				soundServer.setEnginePitch(carRepresentation.getCarNumber(),pitch)

				distance=carRepresentation.getPlayerDistance()
				volume=(10.0-distance)/10.0
				soundServer.setEngineVolume(carRepresentation.getCarNumber(),volume)

				balance=self.getCameraCar().getSidewaysPosition()-carRepresentation.getSidewaysPosition()
				if balance<-1.0:
					balance=-1.0
				elif balance>1.0:
					balance=1.0
				soundServer.setEngineBalance(carRepresentation.getCarNumber(),balance)

			carRepresentation.getVisualPeer().setH(heading)

		playerCar=self.getPlayerCar()
		if playerCar is not None:
			playerCar.detectCollisions()
			playerCar.detectSceneryCollisions()

			if self.overtakeTrackingEnabled:
				playerSegmentPosition=playerCar.getSegmentPosition()
				playerLastSegmentPosition=playerCar.getLastSegmentPosition()
				if playerSegmentPosition>playerLastSegmentPosition:
					for car in self.getLogicalCarRepresentations():
						if car is not playerCar:
							if not car.getLastMoveWasWrap():
								computerSegmentPosition=car.getSegmentPosition()
								computerLastSegmentPosition=car.getLastSegmentPosition()
								if computerSegmentPosition>computerLastSegmentPosition:
									if playerLastSegmentPosition<computerLastSegmentPosition and playerSegmentPosition>computerSegmentPosition:
										self.carsPassed=self.carsPassed+1
									if playerLastSegmentPosition>computerLastSegmentPosition and playerSegmentPosition<computerSegmentPosition:
										self.carsPassed=self.carsPassed-1
Beispiel #6
0
    def advanceCars(self):
        soundServer = SoundServer.getInstance()

        for carRepresentation in self.logicalCarRepresentations:

            carRepresentation.move()

            carWorldPosition = TrackGeometry.getWorldPositionByTrackPosition(
                self.getSegments(), carRepresentation.getSegmentPosition(),
                carRepresentation.getSidewaysPosition())

            carRepresentation.getVisualPeer().setPos(carWorldPosition["xpos"],
                                                     carWorldPosition["ypos"],
                                                     0)

            currentSegmentComponents = math.modf(
                carRepresentation.getSegmentPosition())
            distanceThroughCurrentSegment = currentSegmentComponents[0]

            currentSegmentIndex = int(
                math.floor(carRepresentation.getSegmentPosition()))
            nextSegmentIndex = currentSegmentIndex + 1
            if nextSegmentIndex > len(self.segments) - 1:
                nextSegmentIndex = nextSegmentIndex - len(self.segments)

            currentSegmentVector = self.segments[
                currentSegmentIndex].getVector()
            nextSegmentVector = self.segments[nextSegmentIndex].getVector()
            interpolatedX = currentSegmentVector.getX() + (
                nextSegmentVector.getX() -
                currentSegmentVector.getX()) * distanceThroughCurrentSegment
            interpolatedY = currentSegmentVector.getY() + (
                nextSegmentVector.getY() -
                currentSegmentVector.getY()) * distanceThroughCurrentSegment

            heading = self.convertVectorToDegreesRotation(
                Geometry.Point(interpolatedX, interpolatedY))
            heading = heading + 270.0
            if heading > 360.0:
                heading = heading - 360.0

            if carRepresentation is self.getPlayerCar():
                pitch = carRepresentation.getEngine().getRevs() / 6000 + 0.4

                SoundServer.getInstance().setEnginePitch(
                    carRepresentation.getCarNumber(), pitch)

                heading = heading - (float)(
                    carRepresentation.getSteering()) * 20
                if heading > 360:
                    heading = heading - 360
                elif heading < 0:
                    heading = heading + 360
            else:
                pitch = carRepresentation.getSpeed() * 2 + 0.4
                soundServer.setEnginePitch(carRepresentation.getCarNumber(),
                                           pitch)

                distance = carRepresentation.getPlayerDistance()
                volume = (10.0 - distance) / 10.0
                soundServer.setEngineVolume(carRepresentation.getCarNumber(),
                                            volume)

                balance = self.getCameraCar().getSidewaysPosition(
                ) - carRepresentation.getSidewaysPosition()
                if balance < -1.0:
                    balance = -1.0
                elif balance > 1.0:
                    balance = 1.0
                soundServer.setEngineBalance(carRepresentation.getCarNumber(),
                                             balance)

            carRepresentation.getVisualPeer().setH(heading)

        playerCar = self.getPlayerCar()
        if playerCar is not None:
            playerCar.detectCollisions()
            playerCar.detectSceneryCollisions()

            if self.overtakeTrackingEnabled:
                playerSegmentPosition = playerCar.getSegmentPosition()
                playerLastSegmentPosition = playerCar.getLastSegmentPosition()
                if playerSegmentPosition > playerLastSegmentPosition:
                    for car in self.getLogicalCarRepresentations():
                        if car is not playerCar:
                            if not car.getLastMoveWasWrap():
                                computerSegmentPosition = car.getSegmentPosition(
                                )
                                computerLastSegmentPosition = car.getLastSegmentPosition(
                                )
                                if computerSegmentPosition > computerLastSegmentPosition:
                                    if playerLastSegmentPosition < computerLastSegmentPosition and playerSegmentPosition > computerSegmentPosition:
                                        self.carsPassed = self.carsPassed + 1
                                    if playerLastSegmentPosition > computerLastSegmentPosition and playerSegmentPosition < computerSegmentPosition:
                                        self.carsPassed = self.carsPassed - 1