Ejemplo n.º 1
0
 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()))
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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

        
        
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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())
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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()
Ejemplo n.º 12
0
 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)