use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.
the class TmxMapLoader method loadMap.
@Override
public IMap loadMap(final String path) {
final Map map = XmlUtilities.readFromFile(Map.class, path);
if (map == null) {
return null;
}
String basePath = FileUtilities.getParentDirPath(path);
for (Tileset tilesets : map.getRawTileSets()) {
tilesets.loadFromSource(basePath);
}
// by default the map is named by the source file
String name = path;
final int pos = name.lastIndexOf('.');
if (pos > 0) {
name = name.substring(0, pos);
}
int lastBackslash = name.lastIndexOf('/');
if (lastBackslash != -1) {
name = name.substring(lastBackslash + 1, name.length());
} else {
int lastForwardSlash = name.lastIndexOf('\\');
if (lastForwardSlash != -1) {
name = name.substring(lastForwardSlash + 1, name.length());
}
}
map.setFileName(name);
map.setPath(path);
map.updateTileTerrain();
return map;
}
use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.
the class Program method initToolBar.
private static JToolBar initToolBar() {
// create basic icon toolbar
JToolBar basicMenu = new JToolBar();
JButton cr = new JButton();
cr.setIcon(new ImageIcon(Resources.getImage("button-create.png")));
basicMenu.add(cr);
cr.addActionListener(a -> EditorScreen.instance().create());
JButton op = new JButton();
op.setIcon(new ImageIcon(Resources.getImage("button-load.png")));
basicMenu.add(op);
op.addActionListener(a -> EditorScreen.instance().load());
JButton sv = new JButton();
sv.setIcon(new ImageIcon(Resources.getImage("button-save.png")));
basicMenu.add(sv);
sv.addActionListener(a -> EditorScreen.instance().save(false));
basicMenu.addSeparator();
JButton undo = new JButton();
undo.setIcon(new ImageIcon(Resources.getImage("button-undo.png")));
basicMenu.add(undo);
undo.addActionListener(a -> UndoManager.instance().undo());
JButton redo = new JButton();
redo.setIcon(new ImageIcon(Resources.getImage("button-redo.png")));
basicMenu.add(redo);
redo.addActionListener(a -> UndoManager.instance().redo());
undo.setEnabled(false);
redo.setEnabled(false);
basicMenu.addSeparator();
JToggleButton place = new JToggleButton();
place.setIcon(new ImageIcon(Resources.getImage("button-placeobject.png")));
basicMenu.add(place);
JToggleButton ed = new JToggleButton();
ed.setIcon(new ImageIcon(Resources.getImage("button-edit.png")));
ed.setSelected(true);
JToggleButton mv = new JToggleButton();
mv.setIcon(new ImageIcon(Resources.getImage("button-move.png")));
mv.setEnabled(false);
ed.addActionListener(a -> {
ed.setSelected(true);
place.setSelected(false);
mv.setSelected(false);
isChanging = true;
EditorScreen.instance().getMapComponent().setEditMode(MapComponent.EDITMODE_EDIT);
isChanging = false;
Game.getScreenManager().getRenderComponent().setCursor(CURSOR, 0, 0);
});
basicMenu.add(ed);
basicMenu.add(mv);
place.addActionListener(a -> {
place.setSelected(true);
ed.setSelected(false);
mv.setSelected(false);
isChanging = true;
EditorScreen.instance().getMapComponent().setEditMode(MapComponent.EDITMODE_CREATE);
isChanging = false;
});
mv.addActionListener(a -> {
mv.setSelected(true);
ed.setSelected(false);
place.setSelected(false);
isChanging = true;
EditorScreen.instance().getMapComponent().setEditMode(MapComponent.EDITMODE_MOVE);
isChanging = false;
Game.getScreenManager().getRenderComponent().setCursor(CURSOR_MOVE, 0, 0);
});
EditorScreen.instance().getMapComponent().onEditModeChanged(i -> {
if (isChanging) {
return;
}
if (i == MapComponent.EDITMODE_CREATE) {
ed.setSelected(false);
mv.setSelected(false);
place.setSelected(true);
}
if (i == MapComponent.EDITMODE_EDIT) {
place.setSelected(false);
mv.setSelected(false);
ed.setSelected(true);
Game.getScreenManager().getRenderComponent().setCursor(CURSOR, 0, 0);
}
if (i == MapComponent.EDITMODE_MOVE) {
ed.setSelected(false);
place.setSelected(false);
mv.setSelected(true);
Game.getScreenManager().getRenderComponent().setCursor(CURSOR_MOVE, 0, 0);
}
});
JButton del = new JButton();
del.setIcon(new ImageIcon(Resources.getImage("button-delete.png")));
basicMenu.add(del);
del.setEnabled(false);
del.addActionListener(a -> EditorScreen.instance().getMapComponent().delete());
// copy
JButton cop = new JButton();
cop.setIcon(new ImageIcon(Resources.getImage("button-copy.png")));
basicMenu.add(cop);
cop.setEnabled(false);
ActionListener copyAction = a -> EditorScreen.instance().getMapComponent().copy();
cop.addActionListener(copyAction);
cop.getModel().setMnemonic('C');
KeyStroke keyStroke = KeyStroke.getKeyStroke('C', Event.CTRL_MASK, false);
cop.registerKeyboardAction(copyAction, keyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
// paste
JButton paste = new JButton();
paste.setIcon(new ImageIcon(Resources.getImage("button-paste.png")));
basicMenu.add(paste);
ActionListener pasteAction = a -> EditorScreen.instance().getMapComponent().paste();
paste.addActionListener(pasteAction);
paste.getModel().setMnemonic('V');
KeyStroke keyStrokePaste = KeyStroke.getKeyStroke('V', Event.CTRL_MASK, false);
paste.registerKeyboardAction(pasteAction, keyStrokePaste, JComponent.WHEN_IN_FOCUSED_WINDOW);
// cut
JButton cut = new JButton();
cut.setIcon(new ImageIcon(Resources.getImage("button-cut.png")));
basicMenu.add(cut);
cut.setEnabled(false);
ActionListener cutAction = a -> EditorScreen.instance().getMapComponent().cut();
cut.addActionListener(cutAction);
cut.getModel().setMnemonic('X');
KeyStroke keyStrokeCut = KeyStroke.getKeyStroke('X', Event.CTRL_MASK, false);
cut.registerKeyboardAction(cutAction, keyStrokeCut, JComponent.WHEN_IN_FOCUSED_WINDOW);
EditorScreen.instance().getMapComponent().onFocusChanged(mo -> {
if (mv.isSelected()) {
mv.setSelected(false);
ed.setSelected(true);
}
mv.setEnabled(mo != null);
del.setEnabled(mo != null);
cop.setEnabled(mo != null);
cut.setEnabled(mo != null);
undo.setEnabled(UndoManager.instance().canUndo());
redo.setEnabled(UndoManager.instance().canRedo());
paste.setEnabled(EditorScreen.instance().getMapComponent().getCopiedBlueprint() != null);
});
EditorScreen.instance().getMapComponent().onEditModeChanged(mode -> paste.setEnabled(EditorScreen.instance().getMapComponent().getCopiedBlueprint() != null));
UndoManager.onUndoStackChanged(manager -> {
EditorScreen.instance().getMapComponent().updateTransformControls();
undo.setEnabled(manager.canUndo());
redo.setEnabled(manager.canRedo());
});
basicMenu.addSeparator();
JButton colorButton = new JButton();
colorButton.setIcon(new ImageIcon(Resources.getImage("button-color.png")));
colorButton.setEnabled(false);
JTextField colorText = new JTextField();
colorText.setEnabled(false);
colorText.setMaximumSize(new Dimension(50, 50));
JSpinner spinnerAmbientAlpha = new JSpinner();
spinnerAmbientAlpha.setModel(new SpinnerNumberModel(0, 0, 255, 1));
spinnerAmbientAlpha.setFont(Program.TEXT_FONT);
spinnerAmbientAlpha.setMaximumSize(new Dimension(50, 50));
spinnerAmbientAlpha.setEnabled(false);
spinnerAmbientAlpha.addChangeListener(e -> {
if (Game.getEnvironment() == null || Game.getEnvironment().getMap() == null || isChanging) {
return;
}
Game.getEnvironment().getMap().setCustomProperty(MapProperty.AMBIENTALPHA, spinnerAmbientAlpha.getValue().toString());
Game.getEnvironment().getAmbientLight().setAlpha((int) spinnerAmbientAlpha.getValue());
});
colorButton.addActionListener(a -> {
if (Game.getEnvironment() == null || Game.getEnvironment().getMap() == null || isChanging) {
return;
}
Color color = null;
if (colorText.getText() != null && !colorText.getText().isEmpty()) {
Color solid = Color.decode(colorText.getText());
color = new Color(solid.getRed(), solid.getGreen(), solid.getBlue(), (int) spinnerAmbientAlpha.getValue());
}
Color result = ColorChooser.showRgbDialog("Select an ambient color.", color);
if (result == null) {
return;
}
String h = "#" + Integer.toHexString(result.getRGB()).substring(2);
colorText.setText(h);
spinnerAmbientAlpha.setValue(result.getAlpha());
Game.getEnvironment().getMap().setCustomProperty(MapProperty.AMBIENTCOLOR, colorText.getText());
Game.getEnvironment().getAmbientLight().setColor(result);
});
EditorScreen.instance().getMapComponent().onMapLoaded(map -> {
isChanging = true;
colorButton.setEnabled(map != null);
spinnerAmbientAlpha.setEnabled(map != null);
colorText.setText(map.getCustomProperty(MapProperty.AMBIENTCOLOR));
String alpha = map.getCustomProperty(MapProperty.AMBIENTALPHA);
if (alpha != null && !alpha.isEmpty()) {
spinnerAmbientAlpha.setValue((int) Double.parseDouble(alpha));
}
isChanging = false;
});
basicMenu.add(colorButton);
basicMenu.add(Box.createHorizontalStrut(5));
basicMenu.add(colorText);
basicMenu.add(Box.createHorizontalStrut(5));
basicMenu.add(spinnerAmbientAlpha);
return basicMenu;
}
use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.
the class MapComponent method importMap.
public void importMap() {
if (this.getMaps() == null) {
return;
}
final IMapLoader tmxLoader = new TmxMapLoader();
XmlImportDialog.importXml("Tilemap", Map.FILE_EXTENSION, files -> {
for (File file : files) {
String mapPath = file.toString();
Map map = (Map) tmxLoader.loadMap(mapPath);
if (map == null) {
log.log(Level.WARNING, "could not load map from file {0}", new Object[] { mapPath });
return;
}
if (map.getMapObjectLayers().isEmpty()) {
// make sure there's a map object layer on the map because we need one
// to add any kind of entities
MapObjectLayer layer = new MapObjectLayer();
layer.setName(DEFAULT_MAPOBJECTLAYER_NAME);
map.addMapObjectLayer(layer);
}
Optional<Map> current = this.maps.stream().filter(x -> x.getFileName().equals(map.getFileName())).findFirst();
if (current.isPresent()) {
int n = JOptionPane.showConfirmDialog(Game.getScreenManager().getRenderComponent(), Resources.get("input_replace_map", map.getFileName()), Resources.get("input_replace_map_title"), JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
this.getMaps().remove(current.get());
} else {
return;
}
}
this.getMaps().add(map);
Collections.sort(this.getMaps());
for (IImageLayer imageLayer : map.getImageLayers()) {
BufferedImage img = Resources.getImage(imageLayer.getImage().getAbsoluteSourcePath(), true);
Spritesheet sprite = Spritesheet.load(img, imageLayer.getImage().getSource(), img.getWidth(), img.getHeight());
this.screen.getGameFile().getSpriteSheets().add(new SpriteSheetInfo(sprite));
}
// remove old spritesheets
for (ITileset tileSet : map.getTilesets()) {
this.loadTileset(tileSet, true);
}
// remove old tilesets
for (ITileset tileset : map.getExternalTilesets()) {
this.loadTileset(tileset, false);
}
EditorScreen.instance().updateGameFileMaps();
ImageCache.clearAll();
if (this.environments.containsKey(map.getFileName())) {
this.environments.remove(map.getFileName());
}
EditorScreen.instance().getMapSelectionPanel().bind(this.getMaps(), true);
this.loadEnvironment(map);
log.log(Level.INFO, "imported map {0}", new Object[] { map.getFileName() });
}
});
}
use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.
the class MapComponent method exportMap.
public void exportMap() {
if (this.getMaps() == null || this.getMaps().isEmpty()) {
return;
}
Map map = (Map) Game.getEnvironment().getMap();
if (map == null) {
return;
}
this.exportMap(map);
}
use of de.gurkenlabs.litiengine.environment.tilemap.xml.Map in project litiengine by gurkenlabs.
the class MapComponent method loadEnvironment.
public void loadEnvironment(Map map) {
this.loading = true;
try {
if (Game.getEnvironment() != null && Game.getEnvironment().getMap() != null) {
final String mapName = Game.getEnvironment().getMap().getFileName();
double x = Game.getCamera().getFocus().getX();
double y = Game.getCamera().getFocus().getY();
Point2D newPoint = new Point2D.Double(x, y);
this.cameraFocus.put(mapName, newPoint);
this.selectedLayers.put(mapName, EditorScreen.instance().getMapSelectionPanel().getSelectedLayerIndex());
}
Point2D newFocus = null;
if (this.cameraFocus.containsKey(map.getFileName())) {
newFocus = this.cameraFocus.get(map.getFileName());
} else {
newFocus = new Point2D.Double(map.getSizeInPixels().getWidth() / 2, map.getSizeInPixels().getHeight() / 2);
this.cameraFocus.put(map.getFileName(), newFocus);
}
Game.getCamera().setFocus(new Point2D.Double(newFocus.getX(), newFocus.getY()));
this.ensureUniqueIds(map);
if (!this.environments.containsKey(map.getFileName())) {
Environment env = new Environment(map);
env.init();
this.environments.put(map.getFileName(), env);
}
Game.loadEnvironment(this.environments.get(map.getFileName()));
Program.updateScrollBars();
EditorScreen.instance().getMapSelectionPanel().setSelection(map.getFileName());
if (this.selectedLayers.containsKey(map.getFileName())) {
EditorScreen.instance().getMapSelectionPanel().selectLayer(this.selectedLayers.get(map.getFileName()));
}
EditorScreen.instance().getMapObjectPanel().bind(this.getFocusedMapObject());
for (Consumer<Map> cons : this.mapLoadedConsumer) {
cons.accept(map);
}
} finally {
this.loading = false;
}
}
Aggregations