def myProcessDataFunction(self, netDatagram): # check a message and do what it says myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: # This is a debugging message messageToPrint = myIterator.getString() print messageToPrint elif msgID == CAR_MESSAGE: # This updates a car carNum = myIterator.getUint8() for num in self.ignore: # if the car message is out of date, ignore it if num == carNum: break else: # else update the car carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == NEW_PLAYER_MESSAGE: # This creates a new player if len(self.carData.carlist) >= self.players: self.cWriter.send(self.startDatagram(), netDatagram.getConnection()) self.cWriter.send(self.mapDatagram(), netDatagram.getConnection()) self.cWriter.send(self.addNewCar(), netDatagram.getConnection()) self.returnAllCars(netDatagram.getConnection()) elif msgID == COLLIDED_MESSAGE: # This verifies that a car has recieved its collision message and is now up to date carNum = myIterator.getUint8() self.ignore.remove(carNum) elif msgID == END_MESSAGE: # This recieves a player score self.playerscores.append((myIterator.getString(), myIterator.getInt32()))
def process(self, data): it = PyDatagramIterator(data) vel = it.getFloat32() z = it.getFloat32() diff = z - self.smiley.getZ() self.smiley.setPythonTag("velocity", vel + diff * 0.03) return None
def process(self, data): it = PyDatagramIterator(data) mssgID = it.getUint8() if mssgID == 42: return None vel = it.getFloat32() z = it.getFloat32() x = it.getFloat32() y = it.getFloat32() checksum = it.getFloat32() #print "velocity:" , vel , #" Z position:" , z , " Checksum " , checksum newx = x zdiff = z - self.smiley.getZ() self.smiley.setPythonTag("velocity", vel + zdiff * 0.03) #self.smiley.setX(x) #self.smiley.setZ(z) #self.smiley.setY(y) data = PyDatagram() data.addUint8(0) data.addString("w") #change this to key being pressed forward data.addString("OH HI MARTK!!") return data
def begin(self): if self.cReader.dataAvailable(): datagram = NetDatagram() # catch the incoming data in this instance # Check the return value; if we were threaded, someone else could have # snagged this data before we did if self.cReader.getData(datagram): myIterator = PyDatagramIterator(datagram) msgID = myIterator.getUint8() #If not in our protocol range then we just reject if msgID < 0 or msgID > 200: return #Order of these will need to be optimized later #We now pull out the rest of our headers remotePacketCount = myIterator.getUint8() ack = myIterator.getUint8() acks = myIterator.getUint16() hashID = myIterator.getUint16() sourceOfMessage = datagram.getConnection() if msgID == protocol.NEW_SHIP: log.info("New ship") playerPilotID = myIterator.getUint16() shipID = myIterator.getUint16() shipName = myIterator.getString() health = myIterator.getUint8() position = Point3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32()) linearVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32()) rotiation = VBase3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32()) angularVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32()) ship = sandbox.addEntity(shipID) component = ships.PilotComponent() component.accountEntityID = playerPilotID ship.addComponent(component) component = ships.BulletPhysicsComponent() messenger.send("addSpaceShip", [component, shipName, position, linearVelocity]) ship.addComponent(component) component = ships.ThrustComponent() ship.addComponent(component) component = ships.InfoComponent() component.health = health component.name = shipName ship.addComponent(component) elif msgID == protocol.PLAYER_MOVED_SHIP: log.debug("Player moved ship") accountID = myIterator.getUint16() shipID = myIterator.getUint16() print sandbox.components[shipID] universals.shipNode = sandbox.components[shipID][ships.BulletPhysicsComponent].nodePath elif msgID == protocol.LOGIN_ACCEPTED: log.info("Login accepted") entityID = myIterator.getUint8() universals.day = myIterator.getFloat32() elif msgID == protocol.LOGIN_DENIED: log.info("Login failed")
def process(self, data): #print "Got some data" it = PyDatagramIterator(data) msgid = it.getUint8() if msgid == 1: direction['1']=it.getString() #self.printMessage("Server received:", direction['1']) if msgid == 23: print "server got shout out" update = PyDatagram() update.addUint8(23) self.Application.server.broadcast(update) #standard update if msgid == 13: tempID = it.getInt8() #print "updating position for player ", tempID self.Application.players[tempID].setX(it.getFloat32()) self.Application.players[tempID].setY(it.getFloat32()) self.Application.players[tempID].setZ(it.getFloat32()) self.Application.players[tempID].setH(it.getFloat32()) self.Application.players[tempID].setP(it.getFloat32()) self.Application.players[tempID].setR(it.getFloat32()) self.Application.players[tempID].setPythonTag("velocity",it.getFloat32()) #self.printMessage("Server received:", direction[2]) elif msgid == 38: if self.Application.server.isStarted is True: print "Game over" data = PyDatagram() data.addInt8(38) self.Application.server.broadcast(data) '''if msgid == 3: direction['3']=it.getString() 3 self.printMessage("Server received:", direction['3']) if msgid == 4: direction['4']=it.getString() self.printMessage("Server received:", direction['4']) if msgid == 5: direction['5']=it.getString() self.printMessage("Server received:", direction['5']) ''' return None
def update(self, task): while self.reader.dataAvailable(): datagram = NetDatagram() if self.reader.getData(datagram): update = PyDatagramIterator(datagram) num_objects = update.getInt8() for i in range(num_objects): name = update.getString() x = update.getFloat32() y = update.getFloat32() z = update.getFloat32() h = update.getFloat32() p = update.getFloat32() r = update.getFloat32() if name.startswith('Walker') and name not in self.world.objects: self.world.create_walker(name) obj = self.world.objects.get(name) if obj: obj.move((x, y, z)) obj.rotate(h, p, r) return task.cont
def myProcessDataFunction(self, netDatagram): myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: messageToPrint = myIterator.getString() print messageToPrint elif msgID == CAR_MESSAGE: carNum = myIterator.getUint8() carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carHp)) elif msgID == NEW_PLAYER_MESSAGE: self.cWriter.send(self.addNewCar(), netDatagram.getConnection()) self.returnAllCars(netDatagram.getConnection())
def update(self, task): while self.reader.dataAvailable(): datagram = NetDatagram() if self.reader.getData(datagram): update = PyDatagramIterator(datagram) num_objects = update.getInt8() for i in range(num_objects): name = update.getString() x = update.getFloat32() y = update.getFloat32() z = update.getFloat32() h = update.getFloat32() p = update.getFloat32() r = update.getFloat32() if name.startswith( 'Walker') and name not in self.world.objects: self.world.create_walker(name) obj = self.world.objects.get(name) if obj: obj.move((x, y, z)) obj.rotate(h, p, r) return task.cont
def update(self, task): while self.reader.dataAvailable(): datagram = NetDatagram() if self.reader.getData(datagram): dataIter = PyDatagramIterator(datagram) pid = dataIter.getInt8() x = dataIter.getFloat32() y = dataIter.getFloat32() if pid not in self.players: print 'NEW PLAYER', pid self.players[pid] = Player(pid=pid, draw=True) self.players[pid].move_to(x, y) return task.cont
def update(self, task): while self.reader.dataAvailable(): datagram = NetDatagram() if self.reader.getData(datagram): dataIter = PyDatagramIterator(datagram) pid = dataIter.getInt8() x = dataIter.getFloat32() y = dataIter.getFloat32() if pid not in self.players: print 'NEW PLAYER', pid self.players[pid] = Player(pid=pid, draw=True) self.players[pid].move_to(x, y) return task.cont
def client_processing(self,datagram): data_iter = PyDatagramIterator(datagram) msgID = data_iter.getUint16() if msgID == PRINT_MESSAGE: messageToPrint = data_iter.getString() print messageToPrint if msgID == ARMY_MOVE: army_id = data_iter.getInt16() ax = data_iter.getFloat64() ay = data_iter.getFloat64() tx = data_iter.getFloat64() ty = data_iter.getFloat64() base.armies[army_id].node_path.setX(ax) base.armies[army_id].node_path.setY(ay) base.armies[army_id].move_to_point(tx,ty) if msgID == CLIENT_INIT_UPDATE: p1_name = data_iter.getString() p1_kingdom = data_iter.getString() p1_ready = data_iter.getInt32() game_map = data_iter.getInt32() base.menu_manager.menus["mp-game"].client_update(p1_name,p1_kingdom,p1_ready,game_map) if msgID == SERVER_CHAT: r = data_iter.getInt32() g = data_iter.getInt32() b = data_iter.getInt32() text = data_iter.getString() base.menu_manager.menus["mp-game"].chat_add((r,g,b),text) if msgID == SERVER_READY: but_id = data_iter.getInt32() state = data_iter.getInt32() base.menu_manager.menus["mp-game"].obj_list[but_id]["indicatorValue"]=state base.menu_manager.menus["mp-game"].start_game_check() if msgID == SERVER_LOADED: base.menu_manager.menus["mp-load"].load() if msgID == ALL_LOADED: base.menu_manager.menus["mp-load"].load_complete() if msgID == GAME_START: base.menu_manager.menu_goto("mp-load") if msgID == MAP_SET: map = data_iter.getInt32() base.menu_manager.menus["mp-game"].map_selected = map mapname = base.menu_manager.menus["mp-game"].maplist[map]["fullname"] mapimage = base.menu_manager.menus["mp-game"].maplist[map]["preview"] base.menu_manager.menus["mp-game"].obj_list[11]["text"]=mapname base.menu_manager.menus["mp-game"].obj_list[10].setImage(mapimage) if msgID == BATTLE_TURN: bat = data_iter.getInt32() turn = data_iter.getInt32() base.battles[bat].turn_change(turn) if msgID == BATTLE_START: a1 = data_iter.getInt32() a1_x = data_iter.getFloat32() a1_y = data_iter.getFloat32() a2 = data_iter.getInt32() a2_x = data_iter.getFloat32() a2_y = data_iter.getFloat32() army_start = data_iter.getInt32() base.armies[a1].stop() base.armies[a2].stop() base.armies[a1].node_path.setPos(a1_x,a1_y,0) base.armies[a2].node_path.setPos(a2_x,a2_y,0) base.battles.append(TimObjects.Battle([base.armies[a1],base.armies[a2]],army_start)) if msgID == BATTLE_CLASH: battle = data_iter.getInt32() a1 = data_iter.getInt32() a2 = data_iter.getInt32() result = data_iter.getString() buff = data_iter.getInt8() base.battles[battle].clash(base.armies[a1],base.armies[a2],result,buff) if msgID == BATTLE_ARMYADD: bat = data_iter.getInt32() army = data_iter.getInt32() a_x = data_iter.getFloat32() a_y = data_iter.getFloat32() base.battles[bat].add_army(base.armies[army]) base.armies[army].node_path.setPos(a_x,a_y,0) if msgID == BATTLE_END: bat = data_iter.getInt32() base.battles[bat].end() if msgID == BUILD_START: t_id = data_iter.getInt32() player = data_iter.getInt8() type = data_iter.getString() base.towers[t_id].build_start() if msgID == TOWER_CAPTURE: t_id = data_iter.getInt32() player = data_iter.getInt8() base.towers[t_id].change_owner(player) if msgID == BUILD_CANCEL: t_id = data_iter.getInt32() base.towers[t_id].build_cancel() if msgID == BUILD_COMPLETE: t_id = data_iter.getInt32() player = data_iter.getInt8() type = data_iter.getString() base.towers[t_id].create_counter()
def myProcessDataFunction(self, netDatagram): # check a message and do what it says myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: # This is a debugging message messageToPrint = myIterator.getString() print messageToPrint elif msgID == PLAYER_ASSIGNMENT_MESSAGE: # This assigns the player to a car playerNum = myIterator.getUint8() self.carData.index = playerNum self.playername += " (%d)"%playerNum carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(playerNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == CAR_MESSAGE: # This updates a car carNum = myIterator.getUint8() if carNum != self.carData.index: carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == COLLIDED_MESSAGE: # This runs car-car collisions collisionFrom = myIterator.getUint8() if collisionFrom == self.carData.index: self.carHitSound.play() self.doCarCollision(myIterator.getUint8()) self.cWriter.send(self.verifyCollisionMessage(), self.myConnection) elif msgID == MAP_MESSAGE: # This sets the map map = myIterator.getString() print map world_loader = w_loader() world_loader.load_world(map) global spawn_locations self.carData.spos = spawn_locations elif msgID == BEGIN_MESSAGE: # This starts the game self.carData.go = True self.textWaitObject.destroy() self.startSound.play() elif msgID == END_MESSAGE: # This ends the game, and then displays the score on the second receipt self.carData.go = False num = myIterator.getInt32() if num == -1: scoreDatagram = self.scoreDatagram() self.cWriter.send(scoreDatagram, self.myConnection) else: textytext = "Most Numerous Deaths:" for i in range(num): textytext += "\n\n%s: %d"%(myIterator.getString(), myIterator.getInt32()) self.textScore = OnscreenText(text=textytext, style=1, fg=(1,1,1,1), pos=(0,0.9), scale = .08)