|
From: <aki...@us...> - 2014-12-17 19:47:58
|
Revision: 9733
http://sourceforge.net/p/gridarta/code/9733
Author: akirschbaum
Date: 2014-12-17 19:47:40 +0000 (Wed, 17 Dec 2014)
Log Message:
-----------
Add support for tiled maps in up and down direction. [Atrinik]
Modified Paths:
--------------
trunk/src/atrinik/ChangeLog
trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/gui/mappropertiesdialog/MapPropertiesDialog.java
trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/maincontrol/DefaultEditorFactory.java
trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/action.properties
trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/messages.properties
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/EnterMap.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/MapActions.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/AbstractMapTilePane.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/FlatMapTilePane.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/IsoMapTilePane.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/utils/DirectionLayout.java
trunk/src/gridarta/src/main/java/net/sf/gridarta/maincontrol/GUIMainControl.java
trunk/src/gridarta/src/main/resources/net/sf/gridarta/messages.properties
trunk/src/model/src/main/java/net/sf/gridarta/model/direction/Direction.java
trunk/src/model/src/main/java/net/sf/gridarta/model/io/AbstractMapArchObjectParser.java
trunk/src/model/src/main/java/net/sf/gridarta/model/maparchobject/AbstractMapArchObject.java
trunk/src/model/src/main/java/net/sf/gridarta/model/mapcursor/MapCursor.java
trunk/src/model/src/test/java/net/sf/gridarta/model/mapcursor/MapCursorTest.java
Added Paths:
-----------
trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/Iso3DMapTilePane.java
Modified: trunk/src/atrinik/ChangeLog
===================================================================
--- trunk/src/atrinik/ChangeLog 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/atrinik/ChangeLog 2014-12-17 19:47:40 UTC (rev 9733)
@@ -1,3 +1,7 @@
+2014-12-17 Alex Tokar
+
+ * Add support for tiled maps in up and down direction.
+
2014-12-07 Andreas Kirschbaum
* Define "rendererFactory" variable in plugins when run from
Modified: trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/gui/mappropertiesdialog/MapPropertiesDialog.java
===================================================================
--- trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/gui/mappropertiesdialog/MapPropertiesDialog.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/gui/mappropertiesdialog/MapPropertiesDialog.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -48,7 +48,7 @@
import javax.swing.filechooser.FileFilter;
import net.sf.gridarta.gui.dialog.help.Help;
import net.sf.gridarta.gui.map.maptilepane.AbstractMapTilePane;
-import net.sf.gridarta.gui.map.maptilepane.IsoMapTilePane;
+import net.sf.gridarta.gui.map.maptilepane.Iso3DMapTilePane;
import net.sf.gridarta.gui.utils.GUIConstants;
import net.sf.gridarta.gui.utils.TextComponentUtils;
import net.sf.gridarta.model.mapmanager.MapManager;
@@ -333,7 +333,7 @@
final Component mainPanel = createMainPanel(map);
tabs.add(ActionBuilderUtils.getString(ACTION_BUILDER, "mapMapTabTitle"), mainPanel);
- mapTilePane = new IsoMapTilePane<GameObject, MapArchObject, Archetype>(mapManager, projectSettings, mapModel, mapFileFilter);
+ mapTilePane = new Iso3DMapTilePane<GameObject, MapArchObject, Archetype>(mapManager, projectSettings, mapModel, mapFileFilter);
final Component tilePanel = createTilePathPanel(mapTilePane);
tabs.add(ActionBuilderUtils.getString(ACTION_BUILDER, "mapTilesTabTitle"), tilePanel);
Modified: trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/maincontrol/DefaultEditorFactory.java
===================================================================
--- trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/maincontrol/DefaultEditorFactory.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/atrinik/src/main/java/net/sf/gridarta/var/atrinik/maincontrol/DefaultEditorFactory.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -535,7 +535,7 @@
@NotNull
@Override
public Direction[] getDirectionMap() {
- return new Direction[] { Direction.NORTH_EAST, Direction.SOUTH_EAST, Direction.SOUTH_WEST, Direction.NORTH_WEST, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.NORTH, };
+ return new Direction[] { Direction.NORTH_EAST, Direction.SOUTH_EAST, Direction.SOUTH_WEST, Direction.NORTH_WEST, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.NORTH, Direction.UP, Direction.DOWN };
}
/**
Modified: trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/action.properties
===================================================================
--- trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/action.properties 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/action.properties 2014-12-17 19:47:40 UTC (rev 9733)
@@ -27,7 +27,7 @@
main.menubar=file edit map archetypes pickmaps resources tools analyze view bookmarks plugins window help
file.menu=newMap openFile goMap recent closeMap - saveMap saveMapAs saveAllMaps - closeAllMaps reloadMap createImage - options shortcuts - exit
edit.menu=undo redo - clear cut copy paste pasteTiled - shift - find findNext findPrev replace fillAuto fillAbove fillBelow randFillAuto randFillAbove randFillBelow floodFill - selectAll invertSelection expandEmptySelection growSelection shrinkSelection
-map.menu=autoJoin - enterExit nextExit prevExit enterNorthMap enterEastMap enterSouthMap enterWestMap enterNorthEastMap enterSouthEastMap enterSouthWestMap enterNorthWestMap - mapCreateView mapProperties shrinkMapSize deleteUnknownObjects - gameObjectTextEditor
+map.menu=autoJoin - enterExit nextExit prevExit enterNorthMap enterEastMap enterSouthMap enterWestMap enterNorthEastMap enterSouthEastMap enterSouthWestMap enterNorthWestMap enterUpMap enterDownMap - mapCreateView mapProperties shrinkMapSize deleteUnknownObjects - gameObjectTextEditor
archetypes.menu=displayGameObjectNames displayArchetypeNames displayIconsOnly - findArchetypes browseArchetypes
#pickmaps.menu: See gridarta
resources.menu=collectArches collectSpells - reloadFaces - viewTreasurelists
@@ -42,7 +42,7 @@
mapwindowFile.menu=saveMap saveMapAs createImage - reloadMap - closeMap
mapwindowEdit.menu=undo redo - clear cut copy paste pasteTiled - shift - find findNext findPrev replace fillAuto fillAbove fillBelow randFillAuto randFillAbove randFillBelow floodFill - selectAll invertSelection expandEmptySelection growSelection shrinkSelection
-mapwindowMap.menu=gridVisible lightVisible - goExit enterExit nextExit prevExit enterNorthMap enterEastMap enterSouthMap enterWestMap enterNorthEastMap enterSouthEastMap enterSouthWestMap enterNorthWestMap - mapCreateView mapProperties shrinkMapSize deleteUnknownObjects openInClient
+mapwindowMap.menu=gridVisible lightVisible - goExit enterExit nextExit prevExit enterNorthMap enterEastMap enterSouthMap enterWestMap enterNorthEastMap enterSouthEastMap enterSouthWestMap enterNorthWestMap enterUpMap enterDownMap - mapCreateView mapProperties shrinkMapSize deleteUnknownObjects openInClient
mapwindowCursor.menu=moveCursor - exitConnector - selectSquare startStopDrag addToSelection subFromSelection releaseDrag - insertArch deleteArch - selectArchAbove selectArchBelow - archAttributes
##########
Modified: trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/messages.properties
===================================================================
--- trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/messages.properties 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/atrinik/src/main/resources/net/sf/gridarta/var/atrinik/messages.properties 2014-12-17 19:47:40 UTC (rev 9733)
@@ -122,6 +122,8 @@
enterSouthWestMap.accel=ctrl pressed NUMPAD4
enterWestMap.accel=ctrl pressed NUMPAD7
enterNorthWestMap.accel=ctrl pressed NUMPAD8
+enterUpMap.accel=ctrl pressed ADD
+enterDownMap.accel=ctrl pressed SUBTRACT
#######
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/EnterMap.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/EnterMap.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/EnterMap.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -238,6 +238,11 @@
scrollTo = new Rectangle(newViewSize.width - oldViewRectangle.width, newViewSize.height - oldViewRectangle.height, oldViewRectangle.width, oldViewRectangle.height);
break;
+ case UP:
+ case DOWN:
+ scrollTo = new Rectangle(oldViewRectangle.x, oldViewRectangle.y, oldViewRectangle.width, oldViewRectangle.height);
+ break;
+
default:
throw new AssertionError();
}
@@ -297,6 +302,10 @@
case NORTH_WEST:
return new Point(mapSize.getWidth() - 1, mapSize.getHeight() - 1);
+ case UP:
+ case DOWN:
+ return new Point(oldCursorLocation.x, oldCursorLocation.y);
+
default:
throw new AssertionError();
}
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/MapActions.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/MapActions.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/mapactions/MapActions.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -68,7 +68,7 @@
* Possible directions for "enter xxx map".
*/
@NotNull
- private final String[] directionsMap = { "enterNorthMap", "enterEastMap", "enterSouthMap", "enterWestMap", "enterNorthEastMap", "enterSouthEastMap", "enterSouthWestMap", "enterNorthWestMap" };
+ private final String[] directionsMap = { "enterNorthMap", "enterEastMap", "enterSouthMap", "enterWestMap", "enterNorthEastMap", "enterSouthEastMap", "enterSouthWestMap", "enterNorthWestMap", "enterUpMap", "enterDownMap" };
/**
* Action for "grid visible".
@@ -564,6 +564,22 @@
}
/**
+ * Action method for entering the up map.
+ */
+ @ActionMethod
+ public void enterUpMap() {
+ doEnterMap(true, Direction.UP);
+ }
+
+ /**
+ * Action method for entering the down map.
+ */
+ @ActionMethod
+ public void enterDownMap() {
+ doEnterMap(true, Direction.DOWN);
+ }
+
+ /**
* Deletes all game objects referencing unknown archetypes.
*/
@ActionMethod
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/AbstractMapTilePane.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/AbstractMapTilePane.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/AbstractMapTilePane.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -140,10 +140,10 @@
this.mapModel = mapModel;
this.nextFocus = nextFocus.clone();
this.mapFileFilter = mapFileFilter;
- assert tileLink.length == 8;
- tileLinks = new TileLink[] { newTileLink("mapNorth", tileLink[0], Direction.SOUTH), newTileLink("mapEast", tileLink[1], Direction.WEST), newTileLink("mapSouth", tileLink[2], Direction.NORTH), newTileLink("mapWest", tileLink[3], Direction.EAST), newTileLink("mapNorthEast", tileLink[4], Direction.SOUTH_WEST), newTileLink("mapSouthEast", tileLink[5], Direction.NORTH_WEST), newTileLink("mapSouthWest", tileLink[6], Direction.NORTH_EAST), newTileLink("mapNorthWest", tileLink[7], Direction.SOUTH_EAST), };
+ assert tileLink.length == 10;
+ tileLinks = new TileLink[] { newTileLink("mapNorth", tileLink[0], Direction.SOUTH), newTileLink("mapEast", tileLink[1], Direction.WEST), newTileLink("mapSouth", tileLink[2], Direction.NORTH), newTileLink("mapWest", tileLink[3], Direction.EAST), newTileLink("mapNorthEast", tileLink[4], Direction.SOUTH_WEST), newTileLink("mapSouthEast", tileLink[5], Direction.NORTH_WEST), newTileLink("mapSouthWest", tileLink[6], Direction.NORTH_EAST), newTileLink("mapNorthWest", tileLink[7], Direction.SOUTH_EAST), newTileLink("mapUp", tileLink[8], Direction.DOWN), newTileLink("mapDown", tileLink[9], Direction.UP)};
attachTiledMaps = new AttachTiledMaps<G, A, R>(mapManager, tileLinks);
- canAttachMaps = tileLink[0].length + tileLink[1].length + tileLink[2].length + tileLink[3].length + tileLink[4].length + tileLink[5].length + tileLink[6].length + tileLink[7].length > 0;
+ canAttachMaps = tileLink[0].length + tileLink[1].length + tileLink[2].length + tileLink[3].length + tileLink[4].length + tileLink[5].length + tileLink[6].length + tileLink[7].length + tileLink[8].length + tileLink[9].length > 0;
mapArchObject = mapModel.getMapArchObject();
tilePaths = buildComponents(directionMapping);
}
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/FlatMapTilePane.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/FlatMapTilePane.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/FlatMapTilePane.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -45,7 +45,7 @@
/**
* The tile links used for the attach map algorithm.
*/
- private static final MapLink[][] TILE_LINK = new MapLink[8][0];
+ private static final MapLink[][] TILE_LINK = new MapLink[10][0];
/**
* Maps map direction to {@link net.sf.gridarta.gui.utils.DirectionLayout}
Added: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/Iso3DMapTilePane.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/Iso3DMapTilePane.java (rev 0)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/Iso3DMapTilePane.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -0,0 +1,99 @@
+/*
+ * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
+ * Copyright (C) 2000-2011 The Gridarta Developers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package net.sf.gridarta.gui.map.maptilepane;
+
+import javax.swing.filechooser.FileFilter;
+import net.sf.gridarta.model.archetype.Archetype;
+import net.sf.gridarta.model.direction.Direction;
+import net.sf.gridarta.model.gameobject.GameObject;
+import net.sf.gridarta.model.maparchobject.MapArchObject;
+import net.sf.gridarta.model.mapmanager.MapManager;
+import net.sf.gridarta.model.mapmodel.MapModel;
+import net.sf.gridarta.model.settings.ProjectSettings;
+import net.sf.gridarta.model.tiles.MapLink;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A Panel for managing the tiling of maps. Implementation for 10 tile paths.
+ * @author <a href="mailto:mic...@no...">Michael Toennies</a>
+ * @author <a href="mailto:ch...@ri...">Christian Hujer</a>
+ */
+public class Iso3DMapTilePane<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractMapTilePane<G, A, R> {
+
+ /**
+ * Serial Version UID.
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The tile links used for the attach map algorithm.
+ */
+ private static final MapLink[][] TILE_LINK = new MapLink[10][2];
+
+ static {
+ /* fine list of indirect links von maps around to other maps around us */
+ TILE_LINK[Direction.NORTH.ordinal()][0] = new MapLink(Direction.NORTH_WEST, Direction.WEST);
+ TILE_LINK[Direction.NORTH.ordinal()][1] = new MapLink(Direction.NORTH_EAST, Direction.EAST);
+
+ TILE_LINK[Direction.NORTH_EAST.ordinal()][0] = new MapLink(Direction.NORTH, Direction.WEST);
+ TILE_LINK[Direction.NORTH_EAST.ordinal()][1] = new MapLink(Direction.EAST, Direction.SOUTH);
+
+ TILE_LINK[Direction.EAST.ordinal()][0] = new MapLink(Direction.NORTH_EAST, Direction.NORTH);
+ TILE_LINK[Direction.EAST.ordinal()][1] = new MapLink(Direction.SOUTH_EAST, Direction.SOUTH);
+
+ TILE_LINK[Direction.SOUTH_EAST.ordinal()][0] = new MapLink(Direction.EAST, Direction.NORTH);
+ TILE_LINK[Direction.SOUTH_EAST.ordinal()][1] = new MapLink(Direction.SOUTH, Direction.WEST);
+
+ TILE_LINK[Direction.SOUTH.ordinal()][0] = new MapLink(Direction.SOUTH_EAST, Direction.EAST);
+ TILE_LINK[Direction.SOUTH.ordinal()][1] = new MapLink(Direction.SOUTH_WEST, Direction.WEST);
+
+ TILE_LINK[Direction.SOUTH_WEST.ordinal()][0] = new MapLink(Direction.SOUTH, Direction.EAST);
+ TILE_LINK[Direction.SOUTH_WEST.ordinal()][1] = new MapLink(Direction.WEST, Direction.NORTH);
+
+ TILE_LINK[Direction.WEST.ordinal()][0] = new MapLink(Direction.SOUTH_WEST, Direction.SOUTH);
+ TILE_LINK[Direction.WEST.ordinal()][1] = new MapLink(Direction.NORTH_WEST, Direction.NORTH);
+
+ TILE_LINK[Direction.NORTH_WEST.ordinal()][0] = new MapLink(Direction.WEST, Direction.SOUTH);
+ TILE_LINK[Direction.NORTH_WEST.ordinal()][1] = new MapLink(Direction.NORTH, Direction.EAST);
+ }
+
+ /**
+ * Maps map direction to {@link net.sf.gridarta.gui.utils.DirectionLayout}
+ * direction.
+ */
+ private static final Direction[] DIRECTION_MAPPING = { Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.NORTH_EAST, Direction.SOUTH_EAST, Direction.SOUTH_WEST, Direction.NORTH_WEST, Direction.UP, Direction.DOWN };
+
+ /**
+ * Indices of next focus.
+ */
+ private static final int[] NEXT_FOCUS = { 4, 5, 6, 7, 1, 2, 3, 0 };
+
+ /**
+ * Create a MapTilePane.
+ * @param mapManager the map manager to use
+ * @param projectSettings the project settings instance
+ * @param mapModel the map that's tiles are to be viewed / controlled
+ * @param mapFileFilter the Swing file filter to use
+ */
+ public Iso3DMapTilePane(final MapManager<G, A, R> mapManager, @NotNull final ProjectSettings projectSettings, final MapModel<G, A, R> mapModel, final FileFilter mapFileFilter) {
+ super(mapManager, projectSettings, mapModel, TILE_LINK, DIRECTION_MAPPING, NEXT_FOCUS, mapFileFilter);
+ }
+
+}
Property changes on: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/Iso3DMapTilePane.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/IsoMapTilePane.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/IsoMapTilePane.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/map/maptilepane/IsoMapTilePane.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -45,7 +45,7 @@
/**
* The tile links used for the attach map algorithm.
*/
- private static final MapLink[][] TILE_LINK = new MapLink[8][2];
+ private static final MapLink[][] TILE_LINK = new MapLink[10][2];
static {
/* fine list of indirect links von maps around to other maps around us */
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/utils/DirectionLayout.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/utils/DirectionLayout.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/gui/utils/DirectionLayout.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -53,7 +53,7 @@
* illegal if this were declared inside the enum.
*/
@NotNull
- private static final Direction[] DAIMONIN_TO_DIRECTION_MAP = new Direction[8];
+ private static final Direction[] DAIMONIN_TO_DIRECTION_MAP = new Direction[10];
static {
addDirection(Direction.NORTH);
@@ -64,6 +64,8 @@
addDirection(Direction.SOUTH_EAST);
addDirection(Direction.SOUTH_WEST);
addDirection(Direction.NORTH_WEST);
+ addDirection(Direction.UP);
+ addDirection(Direction.DOWN);
}
/**
@@ -157,6 +159,20 @@
private Component cC;
/**
+ * Up Component.
+ * @serial include
+ */
+ @Nullable
+ private Component cU;
+
+ /**
+ * Down Component.
+ * @serial include
+ */
+ @Nullable
+ private Component cD;
+
+ /**
* Creates a DirectionLayout with zero gaps.
*/
public DirectionLayout() {
@@ -217,6 +233,12 @@
case NORTH_WEST:
cNW = comp;
break;
+ case UP:
+ cU = comp;
+ break;
+ case DOWN:
+ cD = comp;
+ break;
default:
assert false;
break;
@@ -257,6 +279,10 @@
cSW = null;
} else if (cNW == comp) {
cNW = null;
+ } else if (cU == comp) {
+ cU = null;
+ } else if (cD == comp) {
+ cD = null;
}
}
}
@@ -278,7 +304,9 @@
final Dimension dSE = getMinimumSize(cSE);
final Dimension dSW = getMinimumSize(cSW);
final Dimension dNW = getMinimumSize(cNW);
- dim.height = vGap * 4 + dNW.height + max(dW.height, dN.height) + max(dSW.height, dC.height, dNE.height) + max(dS.height, dE.height) + dSE.height;
+ final Dimension dU = getMinimumSize(cU);
+ final Dimension dD = getMinimumSize(cD);
+ dim.height = vGap * 4 + dNW.height + max(dW.height, dN.height) + max(dSW.height, dC.height, dNE.height) + max(dS.height, dE.height) + dSE.height + max(dU.height, dD.height);
dim.width = max(hGap * 2 + dSW.width + max(dNW.width, dC.width, dSE.width) + dNE.width, hGap + max(dW.width, dS.width) + max(dN.width, dE.width), max(dNW.width, dSE.width));
final Insets insets = parent.getInsets();
dim.width += insets.left + insets.right;
@@ -315,7 +343,9 @@
final Dimension dSE = getPreferredSize(cSE);
final Dimension dSW = getPreferredSize(cSW);
final Dimension dNW = getPreferredSize(cNW);
- dim.height = vGap * 4 + dNW.height + max(dW.height, dN.height) + max(dSW.height, dC.height, dNE.height) + max(dS.height, dE.height) + dSE.height;
+ final Dimension dU = getMinimumSize(cU);
+ final Dimension dD = getMinimumSize(cD);
+ dim.height = vGap * 4 + dNW.height + max(dW.height, dN.height) + max(dSW.height, dC.height, dNE.height) + max(dS.height, dE.height) + dSE.height + max(dU.height, dD.height);
dim.width = hGap * 2 + dSW.width + max(dNW.width, dC.width, dSE.width) + dNE.width;
final Insets insets = parent.getInsets();
dim.width += insets.left + insets.right;
@@ -396,6 +426,9 @@
if (cSE != null) {
rows++;
}
+ if (cU != null || cD != null) {
+ rows++;
+ }
if (rows <= 0) {
return;
}
@@ -439,7 +472,17 @@
}
if (cSE != null) {
cSE.setBounds(left + colWidth + hGap, top, colWidth, rowHeight);
+ top += rowHeight + vGap;
}
+ if (cU != null || cD != null) {
+ if (cU != null) {
+ cU.setBounds(left + ((colWidth + hGap) / 2), top, colWidth, rowHeight);
+ }
+ if (cD != null) {
+ cD.setBounds(left + ((colWidth + hGap) * 3 / 2), top, colWidth, rowHeight);
+ }
+ top += rowHeight + vGap;
+ }
}
}
Modified: trunk/src/gridarta/src/main/java/net/sf/gridarta/maincontrol/GUIMainControl.java
===================================================================
--- trunk/src/gridarta/src/main/java/net/sf/gridarta/maincontrol/GUIMainControl.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/java/net/sf/gridarta/maincontrol/GUIMainControl.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -437,6 +437,8 @@
editorActionManager.createAction("enterSouthEastMap", "Map Navigation", mapActions);
editorActionManager.createAction("enterSouthWestMap", "Map Navigation", mapActions);
editorActionManager.createAction("enterNorthWestMap", "Map Navigation", mapActions);
+ editorActionManager.createAction("enterUpMap", "Map Navigation", mapActions);
+ editorActionManager.createAction("enterDownMap", "Map Navigation", mapActions);
editorActionManager.createToggleAction("gridVisible", "Map Navigation", mapActions);
editorActionManager.createToggleAction("lightVisible", "Map Navigation", new LightVisibleAction(mapViewSettings));
editorActionManager.createToggleAction("smoothing", "Map Navigation", mapActions);
Modified: trunk/src/gridarta/src/main/resources/net/sf/gridarta/messages.properties
===================================================================
--- trunk/src/gridarta/src/main/resources/net/sf/gridarta/messages.properties 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/gridarta/src/main/resources/net/sf/gridarta/messages.properties 2014-12-17 19:47:40 UTC (rev 9733)
@@ -247,6 +247,12 @@
enterNorthWestMap.text=Enter Northwest Map
enterNorthWestMap.shortdescription=Opens the tiled map north west of the current map.
+enterUpMap.text=Enter Up Map
+enterUpMap.shortdescription=Opens the tiled map up of the current map.
+
+enterDownMap.text=Enter Down Map
+enterDownMap.shortdescription=Opens the tiled map down of the current map.
+
deleteUnknownObjects.text=Delete unknown objects
deleteUnknownObjects.shortdescription=Deletes game objects referring to undefined archetypes from the current map.
@@ -549,6 +555,8 @@
mapNorthWest=Northwest
mapSouthEast=Southeast
mapSouthWest=Southwest
+mapUp=Up
+mapDown=Down
mapTiles=Paths for Map-Tiling
mapControl=Control Map-Tiling
mapTilesAttach.text=Attach Map
Modified: trunk/src/model/src/main/java/net/sf/gridarta/model/direction/Direction.java
===================================================================
--- trunk/src/model/src/main/java/net/sf/gridarta/model/direction/Direction.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/model/src/main/java/net/sf/gridarta/model/direction/Direction.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -65,9 +65,19 @@
/**
* North west.
*/
- NORTH_WEST(-1, -1, "NorthWest");
+ NORTH_WEST(-1, -1, "NorthWest"),
/**
+ * Up.
+ */
+ UP(0, 0, "Up"),
+
+ /**
+ * Down.
+ */
+ DOWN(0, 0, "Down");
+
+ /**
* The relative x direction.
*/
private final int dx;
Modified: trunk/src/model/src/main/java/net/sf/gridarta/model/io/AbstractMapArchObjectParser.java
===================================================================
--- trunk/src/model/src/main/java/net/sf/gridarta/model/io/AbstractMapArchObjectParser.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/model/src/main/java/net/sf/gridarta/model/io/AbstractMapArchObjectParser.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -21,6 +21,8 @@
import java.io.BufferedReader;
import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import net.sf.gridarta.model.direction.Direction;
import net.sf.gridarta.model.maparchobject.MapArchObject;
import net.sf.gridarta.utils.NumberUtils;
@@ -38,6 +40,13 @@
public abstract class AbstractMapArchObjectParser<A extends MapArchObject<A>> implements MapArchObjectParser<A> {
/**
+ * Matches the remainder of a "tile_path_xyz" line. First group is the
+ * direction, second group is the destination path.
+ */
+ @NotNull
+ private static final Pattern TILE_PATH_PATTERN = Pattern.compile("(\\d+) (.+)");
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -112,11 +121,16 @@
mapArchObject.setOutdoor(true);
}
} else if (trimmedLine.startsWith("tile_path_")) {
+ final Matcher m = TILE_PATH_PATTERN.matcher(trimmedLine.substring(10));
+ if (!m.matches()) {
+ throw new InvalidMapFormatException("unexpected map attribute: '" + trimmedLine + "'");
+ }
+
// get tile path
try {
- final int index = Integer.valueOf(trimmedLine.substring(10, 11));
- if (index > 0 && index <= Direction.values().length && trimmedLine.length() >= 12 && trimmedLine.charAt(11) == ' ') {
- mapArchObject.setTilePath(Direction.values()[index - 1], trimmedLine.substring(12));
+ final int index = Integer.valueOf(m.group(1));
+ if (index > 0 && index <= Direction.values().length) {
+ mapArchObject.setTilePath(Direction.values()[index - 1], m.group(2));
} else {
throw new InvalidMapFormatException("unexpected map attribute: '" + trimmedLine + "'");
}
Modified: trunk/src/model/src/main/java/net/sf/gridarta/model/maparchobject/AbstractMapArchObject.java
===================================================================
--- trunk/src/model/src/main/java/net/sf/gridarta/model/maparchobject/AbstractMapArchObject.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/model/src/main/java/net/sf/gridarta/model/maparchobject/AbstractMapArchObject.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -126,7 +126,8 @@
/**
* The map tile paths used for map tiling. 0 = north, 1 = east, 2 = south, 3
- * = west. 4 = northeast, 5 = southeast, 6 = southwest, 7 = northwest
+ * = west. 4 = northeast, 5 = southeast, 6 = southwest, 7 = northwest,
+ * 8 = up, 9 = down
*/
@NotNull
private final String[] tilePaths;
Modified: trunk/src/model/src/main/java/net/sf/gridarta/model/mapcursor/MapCursor.java
===================================================================
--- trunk/src/model/src/main/java/net/sf/gridarta/model/mapcursor/MapCursor.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/model/src/main/java/net/sf/gridarta/model/mapcursor/MapCursor.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -377,6 +377,9 @@
* @return {@code true} if cursor really moved
*/
public boolean goTo(final boolean performAction, @NotNull final Direction dir) {
+ if (dir.getDx() == 0 && dir.getDy() == 0) {
+ return false;
+ }
tmpPoint.setLocation(pos.x + dir.getDx(), pos.y + dir.getDy());
if (!mapRec.contains(tmpPoint)) {
return false;
Modified: trunk/src/model/src/test/java/net/sf/gridarta/model/mapcursor/MapCursorTest.java
===================================================================
--- trunk/src/model/src/test/java/net/sf/gridarta/model/mapcursor/MapCursorTest.java 2014-12-17 19:20:52 UTC (rev 9732)
+++ trunk/src/model/src/test/java/net/sf/gridarta/model/mapcursor/MapCursorTest.java 2014-12-17 19:47:40 UTC (rev 9733)
@@ -224,8 +224,13 @@
cursor.setLocation(p);
testEvents(1, 0);
for (final Direction dir : Direction.values()) {
- Assert.assertTrue("go(" + dir + ") should return true. (Maybe the grid was too small.)", cursor.goTo(true, dir));
- testEvents(1, 0);
+ if (dir == Direction.UP || dir == Direction.DOWN) {
+ Assert.assertFalse("go(" + dir + ") should return false. (Maybe the grid was too small.)", cursor.goTo(true, dir));
+ testEvents(0, 0);
+ } else {
+ Assert.assertTrue("go(" + dir + ") should return true. (Maybe the grid was too small.)", cursor.goTo(true, dir));
+ testEvents(1, 0);
+ }
p.x += dir.getDx();
p.y += dir.getDy();
Assert.assertEquals("Moving cursor.", p, cursor.getLocation());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|