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
def doCarCollision(self, otherCarNum): collisions.collideCars(self.carData.carlist[self.carData.index], self.carData.carlist[otherCarNum])