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);
}
}
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);
}
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() });
}
}
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;
}
}
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 });
}
}
}
Aggregations