Search in sources :

Example 1 with Map

use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.

the class MapSelectionPanel method initLayerControl.

private void initLayerControl() {
    if (mapList.getSelectedIndex() == -1 && this.model.size() > 0) {
        this.mapList.setSelectedIndex(0);
    }
    if (EditorScreen.instance().getMapComponent().getMaps().isEmpty()) {
        layerModel.clear();
        return;
    }
    Map map = EditorScreen.instance().getMapComponent().getMaps().get(mapList.getSelectedIndex());
    this.lastSelection = listObjectLayers.getSelectedIndex();
    layerModel.clear();
    for (IMapObjectLayer layer : map.getMapObjectLayers()) {
        String layerName = layer.getName();
        int layerSize = layer.getMapObjects().size();
        JCheckBox newBox = new JCheckBox(layerName + " (" + layerSize + ")");
        if (layer.getColor() != null) {
            final String cacheKey = map.getFileName() + layer.getName();
            if (!ImageCache.IMAGES.containsKey(cacheKey)) {
                BufferedImage img = ImageProcessing.getCompatibleImage(10, 10);
                Graphics2D g = (Graphics2D) img.getGraphics();
                g.setColor(layer.getColor());
                g.fillRect(0, 0, 9, 9);
                g.setColor(Color.BLACK);
                g.drawRect(0, 0, 9, 9);
                g.dispose();
                ImageCache.IMAGES.put(cacheKey, img);
            }
            newBox.setIcon(new ImageIcon(ImageCache.IMAGES.get(cacheKey)));
        }
        newBox.setSelected(true);
        layerModel.addElement(newBox);
    }
    int start = 0;
    int end = mapList.getModel().getSize() - 1;
    if (end >= 0) {
        listObjectLayers.setSelectionInterval(start, end);
        this.selectLayer(this.lastSelection);
    }
}
Also used : JCheckBox(javax.swing.JCheckBox) ImageIcon(javax.swing.ImageIcon) IMapObjectLayer(de.gurkenlabs.litiengine.environment.tilemap.IMapObjectLayer) Map(de.gurkenlabs.litiengine.environment.tilemap.xml.Map) Spawnpoint(de.gurkenlabs.litiengine.environment.tilemap.Spawnpoint) BufferedImage(java.awt.image.BufferedImage) Graphics2D(java.awt.Graphics2D)

Example 2 with Map

use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.

the class MapComponent method loadMaps.

public void loadMaps(String projectPath) {
    final List<String> files = FileUtilities.findFilesByExtension(new ArrayList<>(), Paths.get(projectPath), "tmx");
    log.log(Level.INFO, "{0} maps found in folder {1}", new Object[] { files.size(), projectPath });
    final List<Map> loadedMaps = new ArrayList<>();
    for (final String mapFile : files) {
        final IMapLoader tmxLoader = new TmxMapLoader();
        Map map = (Map) tmxLoader.loadMap(mapFile);
        loadedMaps.add(map);
        log.log(Level.INFO, "map found: {0}", new Object[] { map.getFileName() });
    }
    this.loadMaps(loadedMaps);
}
Also used : TmxMapLoader(de.gurkenlabs.litiengine.environment.tilemap.TmxMapLoader) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) IMapLoader(de.gurkenlabs.litiengine.environment.tilemap.IMapLoader) Map(de.gurkenlabs.litiengine.environment.tilemap.xml.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) IMap(de.gurkenlabs.litiengine.environment.tilemap.IMap)

Example 3 with Map

use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.

the class EditorScreen method loadSpriteSheets.

private void loadSpriteSheets(Map map) {
    List<SpriteSheetInfo> infos = new ArrayList<>();
    int cnt = 0;
    for (ITileset tileSet : map.getTilesets()) {
        if (tileSet.getImage() == null || Spritesheet.find(tileSet.getName()) != null) {
            continue;
        }
        Spritesheet sprite = Spritesheet.find(tileSet.getImage().getSource());
        if (sprite == null) {
            sprite = Spritesheet.load(tileSet);
            if (sprite == null) {
                continue;
            }
        }
        infos.add(new SpriteSheetInfo(sprite));
        cnt++;
    }
    for (IImageLayer imageLayer : map.getImageLayers()) {
        Spritesheet sprite = Spritesheet.find(imageLayer.getImage().getSource());
        if (sprite == null) {
            BufferedImage img = Resources.getImage(imageLayer.getImage().getAbsoluteSourcePath(), true);
            sprite = Spritesheet.load(img, imageLayer.getImage().getSource(), img.getWidth(), img.getHeight());
            if (sprite == null) {
                continue;
            }
        }
        SpriteSheetInfo info = new SpriteSheetInfo(sprite);
        infos.add(info);
        this.getGameFile().getSpriteSheets().removeIf(x -> x.getName().equals(info.getName()));
        this.getGameFile().getSpriteSheets().add(info);
        cnt++;
    }
    this.loadSpriteSheets(infos, false);
    for (SpriteSheetInfo info : infos) {
        if (!this.getGameFile().getSpriteSheets().stream().anyMatch(x -> x.getName().equals(info.getName()))) {
            this.getGameFile().getSpriteSheets().add(info);
        }
    }
    if (cnt > 0) {
        log.log(Level.INFO, "{0} tilesets loaded from {1}", new Object[] { cnt, map.getFileName() });
    }
}
Also used : Color(java.awt.Color) ITileset(de.gurkenlabs.litiengine.environment.tilemap.ITileset) EditorComponent(de.gurkenlabs.utiliti.components.EditorComponent) FileNameExtensionFilter(javax.swing.filechooser.FileNameExtensionFilter) Spritesheet(de.gurkenlabs.litiengine.graphics.Spritesheet) Point(java.awt.Point) ComponentType(de.gurkenlabs.utiliti.components.EditorComponent.ComponentType) MathUtilities(de.gurkenlabs.litiengine.util.MathUtilities) SpriteSheetInfo(de.gurkenlabs.litiengine.SpriteSheetInfo) Map(de.gurkenlabs.litiengine.environment.tilemap.xml.Map) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) Blueprint(de.gurkenlabs.litiengine.environment.tilemap.xml.Blueprint) MapComponent(de.gurkenlabs.utiliti.components.MapComponent) Graphics2D(java.awt.Graphics2D) ImageCache(de.gurkenlabs.litiengine.graphics.ImageCache) FileUtilities(de.gurkenlabs.litiengine.util.io.FileUtilities) Tileset(de.gurkenlabs.litiengine.environment.tilemap.xml.Tileset) JFileChooser(javax.swing.JFileChooser) Resources(de.gurkenlabs.litiengine.Resources) IImageLayer(de.gurkenlabs.litiengine.environment.tilemap.IImageLayer) BufferedImage(java.awt.image.BufferedImage) Font(java.awt.Font) EmitterData(de.gurkenlabs.litiengine.graphics.particles.xml.EmitterData) Collection(java.util.Collection) IOException(java.io.IOException) Logger(java.util.logging.Logger) JOptionPane(javax.swing.JOptionPane) FileFilter(javax.swing.filechooser.FileFilter) Collectors(java.util.stream.Collectors) MapObjectPanel(de.gurkenlabs.utiliti.swing.panels.MapObjectPanel) File(java.io.File) GameData(de.gurkenlabs.litiengine.GameData) Input(de.gurkenlabs.litiengine.input.Input) ImageFormat(de.gurkenlabs.litiengine.graphics.ImageFormat) List(java.util.List) CustomEmitter(de.gurkenlabs.litiengine.graphics.particles.xml.CustomEmitter) XmlUtilities(de.gurkenlabs.litiengine.util.io.XmlUtilities) Paths(java.nio.file.Paths) Screen(de.gurkenlabs.litiengine.gui.screens.Screen) RenderEngine(de.gurkenlabs.litiengine.graphics.RenderEngine) SpritesheetImportPanel(de.gurkenlabs.utiliti.swing.dialogs.SpritesheetImportPanel) Game(de.gurkenlabs.litiengine.Game) ScreenInfo(de.gurkenlabs.litiengine.annotation.ScreenInfo) XmlImportDialog(de.gurkenlabs.utiliti.swing.XmlImportDialog) SpriteSheetInfo(de.gurkenlabs.litiengine.SpriteSheetInfo) ITileset(de.gurkenlabs.litiengine.environment.tilemap.ITileset) Spritesheet(de.gurkenlabs.litiengine.graphics.Spritesheet) ArrayList(java.util.ArrayList) IImageLayer(de.gurkenlabs.litiengine.environment.tilemap.IImageLayer) Point(java.awt.Point) Blueprint(de.gurkenlabs.litiengine.environment.tilemap.xml.Blueprint) BufferedImage(java.awt.image.BufferedImage)

Example 4 with Map

use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.

the class EditorScreen method load.

public void load(File gameFile) {
    boolean proceedLoading = Program.notifyPendingChanges();
    if (!proceedLoading) {
        return;
    }
    final long currentTime = System.nanoTime();
    Game.getScreenManager().getRenderComponent().setCursor(Program.CURSOR_LOAD, 0, 0);
    Game.getScreenManager().getRenderComponent().setCursorOffsetX(0);
    Game.getScreenManager().getRenderComponent().setCursorOffsetY(0);
    this.loading = true;
    try {
        if (!FileUtilities.getExtension(gameFile).equals(GameData.FILE_EXTENSION)) {
            log.log(Level.SEVERE, "unsupported file format {0}", FileUtilities.getExtension(gameFile));
            return;
        }
        if (!gameFile.exists()) {
            log.log(Level.SEVERE, "gameFile {0} does not exist", gameFile);
            return;
        }
        UndoManager.clearAll();
        // set up project settings
        this.currentResourceFile = gameFile.getPath();
        this.gameFile = GameData.load(gameFile.getPath());
        Program.getUserPreferences().setLastGameFile(gameFile.getPath());
        Program.getUserPreferences().addOpenedFile(this.currentResourceFile);
        Program.loadRecentFiles();
        this.setProjectPath(FileUtilities.getParentDirPath(gameFile.getAbsolutePath()));
        // load maps from game file
        this.mapComponent.loadMaps(this.getGameFile().getMaps());
        ImageCache.clearAll();
        Spritesheet.getSpritesheets().clear();
        // load sprite sheets from different sources:
        // 1. add sprite sheets from game file
        // 2. add sprite sheets by tile sets of all maps in the game file
        this.loadSpriteSheets(this.getGameFile().getSpriteSheets(), true);
        log.log(Level.INFO, "{0} spritesheets loaded from {1}", new Object[] { this.getGameFile().getSpriteSheets().size(), this.currentResourceFile });
        for (Map map : this.mapComponent.getMaps()) {
            this.loadSpriteSheets(map);
        }
        // load custom emitter files
        this.loadCustomEmitters(this.getGameFile().getEmitters());
        Program.getAssetTree().forceUpdate();
        // also switch to map component
        if (!this.mapComponent.getMaps().isEmpty()) {
            this.mapComponent.loadEnvironment(this.mapComponent.getMaps().get(0));
        } else {
            Game.loadEnvironment(null);
        }
        this.changeComponent(ComponentType.MAP);
        this.setCurrentStatus(Resources.get("status_gamefile_loaded"));
    } finally {
        Game.getScreenManager().getRenderComponent().setCursor(Program.CURSOR, 0, 0);
        log.log(Level.INFO, "Loading gamefile {0} took: {1} ms", new Object[] { gameFile, (System.nanoTime() - currentTime) / 1000000.0 });
        this.loading = false;
    }
}
Also used : Map(de.gurkenlabs.litiengine.environment.tilemap.xml.Map)

Example 5 with Map

use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.

the class EditorScreen method saveMaps.

private void saveMaps() {
    for (Map map : this.getChangedMaps()) {
        UndoManager.save(map);
        for (String file : FileUtilities.findFilesByExtension(new ArrayList<>(), Paths.get(this.getProjectPath(), "maps"), map.getName() + "." + Map.FILE_EXTENSION)) {
            String newFile = XmlUtilities.save(map, file, Map.FILE_EXTENSION);
            log.log(Level.INFO, "synchronized map {0}", new Object[] { newFile });
        }
    }
}
Also used : Map(de.gurkenlabs.litiengine.environment.tilemap.xml.Map)

Aggregations

Map (de.gurkenlabs.litiengine.environment.tilemap.xml.Map)14 Resources (de.gurkenlabs.litiengine.Resources)5 BufferedImage (java.awt.image.BufferedImage)5 Game (de.gurkenlabs.litiengine.Game)4 IMap (de.gurkenlabs.litiengine.environment.tilemap.IMap)4 Tileset (de.gurkenlabs.litiengine.environment.tilemap.xml.Tileset)4 Color (java.awt.Color)4 Dimension (java.awt.Dimension)4 Font (java.awt.Font)4 Graphics2D (java.awt.Graphics2D)4 File (java.io.File)4 ArrayList (java.util.ArrayList)4 GameData (de.gurkenlabs.litiengine.GameData)3 IMapObjectLayer (de.gurkenlabs.litiengine.environment.tilemap.IMapObjectLayer)3 ITileset (de.gurkenlabs.litiengine.environment.tilemap.ITileset)3 ImageCache (de.gurkenlabs.litiengine.graphics.ImageCache)3 Input (de.gurkenlabs.litiengine.input.Input)3 Point2D (java.awt.geom.Point2D)3 IOException (java.io.IOException)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3