Пример #1
0
 def tskReaderPolling(self, taskdata):
     # every frame, read messages, and then send out updates to all clients
     selfCarDatagram = self.getCarPosDatagramFromCar(self.carData.index) # add self to list of updates
     self.myProcessDataFunction(selfCarDatagram)
     # loop through all messages recieved
     while self.cReader.dataAvailable():
         datagram=NetDatagram()  # catch the incoming data in this instance
         if self.cReader.getData(datagram):
             self.myProcessDataFunction(datagram) # handle the message
     #send out car and collision messages
     carPosDatagrams = self.getCarPosDatagrams()
     collisionDatagrams = self.getCollisionDatagrams()
     for aClient in self.activeConnections:
         for data in carPosDatagrams:
             self.cWriter.send(data, aClient)
         for data in collisionDatagrams:
             self.cWriter.send(data, aClient)
     # start game if enough players have joined
     if self.timer == -1 and self.carData.go == False and len(self.carData.carlist) >= self.players:
         startDatagram = self.startDatagram()
         for aClient in self.activeConnections:
             self.cWriter.send(startDatagram, aClient)
         self.carData.go = True
         self.textWaitObject.destroy()
         self.timer = taskdata.time
         self.startSound.play()
     # run collisions
     for pair in self.carData.collisionlist:
         if pair[0] < pair[1]:
             if pair[0] == 0:
                 self.carHitSound.play()
             collisions.collideCars(self.carData.carlist[pair[0]], self.carData.carlist[pair[1]])
     # if time is up, end game and print scores
     if self.timer >= 0 and taskdata.time > self.timer + self.time * 60:
         if self.carData.go:
             self.carData.go = False
             self.playerscores.append((self.playername, self.carData.carlist[self.carData.index].deaths))
             stopDatagram = self.stopDatagram()
             for aClient in self.activeConnections:
                 self.cWriter.send(stopDatagram, aClient)
         elif len(self.playerscores) >= len(self.carData.carlist) or (taskdata.time > self.timer + self.time * 60 + 15 and self.playerscores != []):
             self.playerscores = pairsort(self.playerscores)
             textytext = "Most Numerous Deaths:"
             for pair in self.playerscores:
                 textytext += "\n\n%s: %d"%pair
             self.textScore = OnscreenText(text=textytext, style=1, fg=(1,1,1,1), pos=(0,0.9), scale = .08)
             scoreDatagram = self.scoreDatagram()
             for aClient in self.activeConnections:
                 self.cWriter.send(scoreDatagram, aClient)
             self.playerscores = []
             
     self.carData.collisionlist = []
     self.clearCarData() #This is to prevent redundant messages from being sent
     return Task.cont
Пример #2
0
 def doCarCollision(self, otherCarNum):
     collisions.collideCars(self.carData.carlist[self.carData.index], self.carData.carlist[otherCarNum])