Exemplo n.º 1
0
    def load(self, ts_file):

        # Must be .ts file
        if path.splitext(ts_file)[1].lower() != ".ts":
            return False

        with open(ts_file) as tsf:
            data = json.load(tsf)
            print "Tileset Loaded: %s" % (data)

            # Let TileSet do its thing
            TileSet.__init__(self, paths.getLevelPath(data['image']), data['tileSize'])

            # direct store of the terrain border bitmask data
            terrain = data.get('terrain')
            if terrain:
                for t, mask in terrain.iteritems():
                    if len(mask) >= self.TERRAIN_TILE_COUNT:
                        self.terrain[t] = mask
                    else:
                        print "%s: Terrain %s does not have enough tiles! Found %i, expected %i." % (ts_file, t, len(mask), self.TERRAIN_TILE_COUNT)
            else:
                print "%s: No Terrain data found." % (ts_file)

            # Override filename
            self.filename = ts_file
            return True
Exemplo n.º 2
0
    def load(self, ts_file):

        # Must be .ts file
        if path.splitext(ts_file)[1].lower() != ".ts":
            return False

        with open(ts_file) as tsf:
            data = json.load(tsf)
            print "Tileset Loaded: %s" % (data)

            # Let TileSet do its thing
            TileSet.__init__(self, paths.getLevelPath(data['image']),
                             data['tileSize'])

            # direct store of the terrain border bitmask data
            terrain = data.get('terrain')
            if terrain:
                for t, mask in terrain.iteritems():
                    if len(mask) >= self.TERRAIN_TILE_COUNT:
                        self.terrain[t] = mask
                    else:
                        print "%s: Terrain %s does not have enough tiles! Found %i, expected %i." % (
                            ts_file, t, len(mask), self.TERRAIN_TILE_COUNT)
            else:
                print "%s: No Terrain data found." % (ts_file)

            # Override filename
            self.filename = ts_file
            return True
Exemplo n.º 3
0
    def save(self, filename = None):
        """Save current level state to file."""
        if not self.tileset:
            return False

        filename = filename if filename else self.lvlFile
        print "Level saving to %s" % filename
        with open(paths.getLevelPath(filename), 'w') as level:
            data = { 'name': self.name, 
                     'tileset': path.basename(self.tileset.filename),
                     'worldImage': self.imgFile
                    }
            json.dump(data, level, indent=True)

            # Save out world image in case it was edited
            pg.image.save(self._worldImg, paths.getLevelPath(self.imgFile))

            return True
        return False
Exemplo n.º 4
0
    def save(self, filename=None):
        """Save current level state to file."""
        if not self.tileset:
            return False

        filename = filename if filename else self.lvlFile
        print "Level saving to %s" % filename
        with open(paths.getLevelPath(filename), 'w') as level:
            data = {
                'name': self.name,
                'tileset': path.basename(self.tileset.filename),
                'worldImage': self.imgFile
            }
            json.dump(data, level, indent=True)

            # Save out world image in case it was edited
            pg.image.save(self._worldImg, paths.getLevelPath(self.imgFile))

            return True
        return False
Exemplo n.º 5
0
    def load(self, filename):
        """Load a level from the given file."""

        # Sanity checks
        if not filename or len(filename) == 0:
            return False

        # Allow from loading from PNG as well as 'lvl' files
        base, ext = path.splitext(filename)
        if ext.lower() == ".png":
            self._worldImg = pg.image.load(paths.getLevelPath(filename))

            self.name = path.basename(base)
            self.name = path.basename(base)
            self.lvlFile = base + ".lvl"
            self.imgFile = filename
            if not self.tileset:
                raise ValueError("Manual Tileset required when loading Level from image!")

        elif ext.lower() == ".lvl":
            # Load from lvl file
            with open(paths.getLevelPath(filename)) as level:
                self.lvlFile = filename

                data = json.load(level)
                print "Level Loaded: \n%s" % (data)
                self.name = data['name']
                self.imgFile = data['worldImage']

                if 'tileset' in data:
                    ts_file = data['tileset']
                    if path.exists(paths.getLevelPath(ts_file)):
                        self.tileset = AdvancedTileSet(paths.getLevelPath(ts_file))
                    else:
                        raise ValueError("TileSet %s Not Found!" % ts_file)
                else:
                    raise ValueError("No TileSet Info Found!")

                if path.exists(paths.getLevelPath(self.imgFile)):
                    self._worldImg = pg.image.load(paths.getLevelPath(self.imgFile))
                else:
                    raise ValueError("World Image %s Not Found!" % self.imgFile)

        else:
            return False

        # pygame doesn't allow you to arbitrarily scale surfaces on blit,
        # so we must prescale the tileset to the tile size we want.
        if self.tileset.tileSize[0] != Level.TILE_WIDTH or self.tileset.tileSize[1] != Level.TILE_HEIGHT:
            self.tileset.resize((Level.TILE_WIDTH, Level.TILE_HEIGHT))
                
        self.size = (self._worldImg.get_width() * Level.TILE_WIDTH,
                     self._worldImg.get_height() * Level.TILE_HEIGHT)

        # Generate first area at origin, just in case
        self._currArea = pg.Surface(self.areaSize)
        self._generateArea((0, 0))

        return True
Exemplo n.º 6
0
    def load(self, filename):
        """Load a level from the given file."""

        # Sanity checks
        if not filename or len(filename) == 0:
            return False

        # Allow from loading from PNG as well as 'lvl' files
        base, ext = path.splitext(filename)
        if ext.lower() == ".png":
            self._worldImg = pg.image.load(paths.getLevelPath(filename))

            self.name = path.basename(base)
            self.name = path.basename(base)
            self.lvlFile = base + ".lvl"
            self.imgFile = filename
            if not self.tileset:
                raise ValueError(
                    "Manual Tileset required when loading Level from image!")

        elif ext.lower() == ".lvl":
            # Load from lvl file
            with open(paths.getLevelPath(filename)) as level:
                self.lvlFile = filename

                data = json.load(level)
                print "Level Loaded: \n%s" % (data)
                self.name = data['name']
                self.imgFile = data['worldImage']

                if 'tileset' in data:
                    ts_file = data['tileset']
                    if path.exists(paths.getLevelPath(ts_file)):
                        self.tileset = AdvancedTileSet(
                            paths.getLevelPath(ts_file))
                    else:
                        raise ValueError("TileSet %s Not Found!" % ts_file)
                else:
                    raise ValueError("No TileSet Info Found!")

                if path.exists(paths.getLevelPath(self.imgFile)):
                    self._worldImg = pg.image.load(
                        paths.getLevelPath(self.imgFile))
                else:
                    raise ValueError("World Image %s Not Found!" %
                                     self.imgFile)

        else:
            return False

        # pygame doesn't allow you to arbitrarily scale surfaces on blit,
        # so we must prescale the tileset to the tile size we want.
        if self.tileset.tileSize[
                0] != Level.TILE_WIDTH or self.tileset.tileSize[
                    1] != Level.TILE_HEIGHT:
            self.tileset.resize((Level.TILE_WIDTH, Level.TILE_HEIGHT))

        self.size = (self._worldImg.get_width() * Level.TILE_WIDTH,
                     self._worldImg.get_height() * Level.TILE_HEIGHT)

        # Generate first area at origin, just in case
        self._currArea = pg.Surface(self.areaSize)
        self._generateArea((0, 0))

        return True