示例#1
0
    def move(self, player: Player, pos: Vector2):
        if self.dungeon.is_valid_position(pos):
            old_pos = player.pos
            player.pos = pos
            self.send_room_data(player)

            # Fetch the rooms
            old_room = self.dungeon.room_at_position(old_pos)
            new_room = self.dungeon.room_at_position(pos)

            # Update players in rooms
            if old_pos != pos:
                old_room.leave(player)
                self.send_msg_to_room(old_room, "%s has left the room" % player.get_true_name(), [player])

            new_room.join(player)

            # Notify everyone in the room that a player has joined
            self.send_msg_to_room(new_room, "%s has joined the room" % player.get_true_name(), [player])

            # Notify player of the players in the room they have joined
            if len(new_room.players) > 1:
                player_names = ', '.join([ply.get_true_name() for ply in new_room.players if ply != player])
                self.send(player, DataTags.WRITE, "There are %d people in this room: %s" %
                          (len(new_room.players) - 1, player_names))
            # Save the player's position
            self.player_persistence.save_data(player)
        else:
            self.send(player, DataTags.WRITE, "Not a valid direction!")  # TODO - less confusing message if map changes
    def load_data(self, player: Player):
        data = self._player_data(player.player_id)

        print(data)

        if data is not None:
            player.nickname = data['nickname']
            player.pos = Vector2(data['pos_x'], data['pos_y'])