Gridarta Editor
AbstractMapArchObject.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.model.maparchobject;
21 
22 import java.awt.Point;
23 import java.io.File;
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.concurrent.CopyOnWriteArrayList;
27 import java.util.regex.Matcher;
28 import java.util.regex.Pattern;
33 import net.sf.gridarta.utils.Size2D;
34 import org.jetbrains.annotations.NotNull;
35 import org.jetbrains.annotations.Nullable;
36 
46 public abstract class AbstractMapArchObject<A extends MapArchObject<A>> implements MapArchObject<A> {
47 
51  private static final long serialVersionUID = 1L;
52 
56  @NotNull
57  public static final String MAP_NAME_UNNAMED = "<unnamed>";
58 
63  @NotNull
64  private static final String MODIFIED_ATTRIBUTE = "Modified:";
65 
69  @NotNull
70  private static final Pattern MODIFIED_ATTRIBUTE_PATTERN = Pattern.compile("^" + MODIFIED_ATTRIBUTE + " *(.*)$", Pattern.MULTILINE);
71 
76  @NotNull
77  private static final Pattern MAP_FILE_NAME_PATTERN = Pattern.compile("((?:(?!_(?:[\\d-]+))[\\w_])+)_([\\d-]+)_([\\d-]+)(?:_([\\d-]+))?");
78 
82  @NotNull
83  private final StringBuilder msgText = new StringBuilder();
84 
88  @NotNull
89  private Size2D mapSize;
90 
94  @NotNull
95  private String mapName;
96 
100  private int enterX;
101 
105  private int enterY;
106 
110  private boolean outdoor;
111 
115  private int resetTimeout;
116 
121  private int swapTime;
122 
126  private int difficulty;
127 
132  private boolean fixedReset;
133 
137  private int darkness;
138 
144  @NotNull
145  private final String @NotNull [] tilePaths;
146 
150  @NotNull
151  private final Collection<MapArchObjectListener> listenerList = new CopyOnWriteArrayList<>();
152 
159  private int transactionDepth;
160 
165  @Nullable
166  private transient Thread transactionThread;
167 
171  private boolean attributeHasChanged;
172 
176  protected AbstractMapArchObject() {
177  tilePaths = new String[Direction.values().length];
178  Arrays.fill(tilePaths, "");
179  mapSize = Size2D.ONE;
181  }
182 
187  protected AbstractMapArchObject(@NotNull final AbstractMapArchObject<A> mapArchObject) {
188  msgText.append(mapArchObject.msgText);
189  mapSize = mapArchObject.mapSize;
190  mapName = mapArchObject.mapName;
191  enterX = mapArchObject.enterX;
192  enterY = mapArchObject.enterY;
193  outdoor = mapArchObject.outdoor;
194  resetTimeout = mapArchObject.resetTimeout;
195  swapTime = mapArchObject.swapTime;
196  difficulty = mapArchObject.difficulty;
197  fixedReset = mapArchObject.fixedReset;
198  darkness = mapArchObject.darkness;
199  tilePaths = mapArchObject.tilePaths.clone();
200  }
201 
202  @NotNull
203  @Override
204  public Size2D getMapSize() {
205  return mapSize;
206  }
207 
208  @Override
209  public void setMapSize(@NotNull final Size2D mapSize) {
210  if (this.mapSize.equals(mapSize)) {
211  return;
212  }
213 
214  this.mapSize = mapSize;
215  setModified();
216  for (final MapArchObjectListener listener : listenerList) {
217  listener.mapSizeChanged(mapSize);
218  }
219  }
220 
221  @NotNull
222  @Override
223  public String getMapName() {
224  return mapName;
225  }
226 
227  @Override
228  public void setMapName(@NotNull final String name) {
229  final String trimmedName = name.trim();
230  if (mapName.equals(trimmedName)) {
231  return;
232  }
233 
234  mapName = trimmedName;
235  setModified();
236  }
237 
238  @Override
239  public int getEnterX() {
240  return enterX;
241  }
242 
243  @Override
244  public void setEnterX(final int enterX) {
245  if (this.enterX == enterX) {
246  return;
247  }
248 
249  this.enterX = enterX;
250  setModified();
251  }
252 
253  @Override
254  public int getEnterY() {
255  return enterY;
256  }
257 
258  @Override
259  public void setEnterY(final int enterY) {
260  if (this.enterY == enterY) {
261  return;
262  }
263 
264  this.enterY = enterY;
265  setModified();
266  }
267 
268  @NotNull
269  @Override
270  public Point getEnter() {
271  return new Point(enterX, enterY);
272  }
273 
274  @Override
275  public boolean isOutdoor() {
276  return outdoor;
277  }
278 
279  @Override
280  public void setOutdoor(final boolean outdoor) {
281  if (this.outdoor == outdoor) {
282  return;
283  }
284 
285  this.outdoor = outdoor;
286  setModified();
287  }
288 
289  @Override
290  public int getResetTimeout() {
291  return resetTimeout;
292  }
293 
294  @Override
295  public void setResetTimeout(final int resetTimeout) {
296  if (this.resetTimeout == resetTimeout) {
297  return;
298  }
299 
300  this.resetTimeout = resetTimeout;
301  setModified();
302  }
303 
304  @Override
305  public int getSwapTime() {
306  return swapTime;
307  }
308 
309  @Override
310  public void setSwapTime(final int swapTime) {
311  if (this.swapTime == swapTime) {
312  return;
313  }
314 
315  this.swapTime = swapTime;
316  setModified();
317  }
318 
319  @Override
320  public int getDifficulty() {
321  return difficulty;
322  }
323 
324  @Override
325  public void setDifficulty(final int difficulty) {
326  if (this.difficulty == difficulty) {
327  return;
328  }
329 
330  this.difficulty = difficulty;
331  setModified();
332  }
333 
334  @Override
335  public boolean isFixedReset() {
336  return fixedReset;
337  }
338 
339  @Override
340  public void setFixedReset(final boolean fixedReset) {
341  if (this.fixedReset == fixedReset) {
342  return;
343  }
344 
345  this.fixedReset = fixedReset;
346  setModified();
347  }
348 
349  @Override
350  public int getDarkness() {
351  return darkness;
352  }
353 
354  @Override
355  public void setDarkness(final int darkness) {
356  if (this.darkness == darkness) {
357  return;
358  }
359 
360  this.darkness = darkness;
361  setModified();
362  }
363 
364  @Override
365  public int getTilePaths() {
366  return tilePaths.length;
367  }
368 
369  @NotNull
370  @Override
371  public String getTilePath(@NotNull final Direction direction) {
372  return tilePaths[direction.ordinal()];
373  }
374 
375  @Override
376  public void setTilePath(@NotNull final Direction direction, @NotNull final String tilePath) {
377  if (tilePaths[direction.ordinal()].equals(tilePath)) {
378  return;
379  }
380 
381  tilePaths[direction.ordinal()] = tilePath;
382  setModified();
383  }
384 
385  @NotNull
386  @Override
387  public String calculateTilePath(@NotNull final Direction direction, @Nullable final MapFile mapFile) {
388  if (mapFile == null) {
389  return "";
390  }
391 
392  final MapPath mapPath = mapFile.getMapPath().getRelativeMapPathFrom(mapFile.getMapPath());
393  final Matcher m = MAP_FILE_NAME_PATTERN.matcher(mapPath.toString());
394  if (!m.matches()) {
395  return "";
396  }
397 
398  final int x = Integer.parseInt(m.group(2));
399  final int y = Integer.parseInt(m.group(3));
400  final int z = m.group(4) == null ? 0 : Integer.parseInt(m.group(4));
401 
402  final StringBuilder sb = new StringBuilder(m.group(1));
403  sb.append(String.format("_%d_%d", x + direction.getDx(), y + direction.getDy()));
404  if (z + direction.getDz() != 0) {
405  sb.append(String.format("_%d", z + direction.getDz()));
406  }
407  return sb.toString();
408  }
409 
410  @Override
411  public void calculateTilePaths(@Nullable final MapFile mapFile, @NotNull final File mapsDirectory) {
412  if (mapFile == null) {
413  return;
414  }
415 
416  for (final Direction direction : Direction.values()) {
417  if (!tilePaths[direction.ordinal()].isEmpty()) {
418  continue;
419  }
420 
421  final String path = calculateTilePath(direction, mapFile);
422  if (path.isEmpty()) {
423  continue;
424  }
425 
426  final AbsoluteMapPath mapPath = new AbsoluteMapPath(mapFile.getMapPath(), "..");
427  final String realPath = mapsDirectory + "/" + mapPath + "/" + path;
428  final File file = new File(realPath);
429 
430  if (file.exists() && file.isFile()) {
431  setTilePath(direction, path);
432  }
433  }
434  }
435 
436  @Override
437  public boolean isTilePathAuto(@NotNull final Direction direction, @Nullable final MapFile mapFile) {
438  return calculateTilePath(direction, mapFile).equals(getTilePath(direction));
439  }
440 
441  @Override
442  public void setState(@NotNull final A mapArchObject) {
443  final AbstractMapArchObject<?> abstractMapArchObject = (AbstractMapArchObject<?>) mapArchObject;
444  setText(abstractMapArchObject.msgText.toString());
445  setMapSize(abstractMapArchObject.mapSize);
446  setMapName(abstractMapArchObject.mapName);
447  setEnterX(abstractMapArchObject.enterX);
448  setEnterY(abstractMapArchObject.enterY);
449  setOutdoor(abstractMapArchObject.outdoor);
450  setResetTimeout(abstractMapArchObject.resetTimeout);
451  setSwapTime(abstractMapArchObject.swapTime);
452  setDifficulty(abstractMapArchObject.difficulty);
453  setFixedReset(abstractMapArchObject.fixedReset);
454  setDarkness(abstractMapArchObject.darkness);
455  for (final Direction direction : Direction.values()) {
456  setTilePath(direction, abstractMapArchObject.tilePaths[direction.ordinal()]);
457  }
458  }
459 
460  @Override
461  public boolean equals(@Nullable final Object obj) {
462  if (obj == this) {
463  return true;
464  }
465  if (obj == null || obj.getClass() != getClass()) {
466  return false;
467  }
468  final AbstractMapArchObject<?> mapArchObject = (AbstractMapArchObject<?>) obj;
469  return mapArchObject.msgText.toString().equals(msgText.toString()) && mapArchObject.mapSize.equals(mapSize) && mapArchObject.mapName.equals(mapName) && mapArchObject.enterX == enterX && mapArchObject.enterY == enterY && mapArchObject.outdoor == outdoor && mapArchObject.resetTimeout == resetTimeout && mapArchObject.swapTime == swapTime && mapArchObject.difficulty == difficulty && mapArchObject.fixedReset == fixedReset && mapArchObject.darkness == darkness && Arrays.equals(mapArchObject.tilePaths, tilePaths);
470  }
471 
472  @Override
473  public int hashCode() {
474  return msgText.hashCode() + mapSize.hashCode() + mapName.hashCode() + enterX + enterY + (outdoor ? 2 : 0) + resetTimeout + swapTime + difficulty + (fixedReset ? 1 : 0) + darkness + Arrays.hashCode(tilePaths);
475  }
476 
477  @Override
478  public void addMapArchObjectListener(@NotNull final MapArchObjectListener listener) {
479  listenerList.add(listener);
480  }
481 
482  @Override
483  public void removeMapArchObjectListener(@NotNull final MapArchObjectListener listener) {
484  listenerList.remove(listener);
485  }
486 
491  protected void setModified() {
492  attributeHasChanged = true;
493  }
494 
495  @Override
496  public void beginTransaction() {
497  if (transactionDepth == 0) {
498  attributeHasChanged = false;
499  transactionThread = Thread.currentThread();
500  } else {
501  // == is okay for threads.
502  //noinspection ObjectEquality
503  if (transactionThread != Thread.currentThread()) {
504  throw new IllegalStateException("A transaction must only be used by one thread.");
505  }
506  }
508  }
509 
510  @Override
511  public void endTransaction() {
512  endTransaction(false);
513  }
514 
515  @Override
516  public void endTransaction(final boolean fireEvent) {
517  if (transactionDepth <= 0) {
518  throw new IllegalStateException("Tried to end a transaction but no transaction was open.");
519  }
521  assert transactionDepth >= 0;
522  if (transactionDepth == 0) {
524  } else if (fireEvent && transactionDepth > 0) {
525  if (attributeHasChanged) {
527  }
528  }
529  }
530 
535  private void commitTransaction() {
536  transactionDepth = 0;
537  transactionThread = null;
538  if (attributeHasChanged) {
540  attributeHasChanged = false;
541  }
542  }
543 
547  private void fireMetaChangedEvent() {
548  for (final MapArchObjectListener listener : listenerList) {
549  listener.mapMetaChanged();
550  }
551  }
552 
553  @Override
554  public void addText(@NotNull final String text) {
555  if (text.isEmpty()) {
556  return;
557  }
558 
559  msgText.append(text);
560  setModified();
561  }
562 
563  @Override
564  public void setText(final String text) {
565  if (msgText.toString().equals(text)) {
566  return;
567  }
568 
569  msgText.delete(0, msgText.length());
570  msgText.append(text);
571  setModified();
572  }
573 
574  @NotNull
575  @Override
576  public String getText() {
577  return msgText.toString();
578  }
579 
580  @Override
581  public void updateModifiedAttribute(@NotNull final String userName) {
582  final String modifiedAttribute = MODIFIED_ATTRIBUTE + " " + String.format("%tF", System.currentTimeMillis()) + " " + userName;
583 
584  final Matcher matcher = MODIFIED_ATTRIBUTE_PATTERN.matcher(msgText);
585  if (!matcher.find()) {
586  // attribute does not exist => add a new one
587  msgText.append("\n");
588  msgText.append(modifiedAttribute);
589  setModified();
590  } else if (!matcher.group().equals(modifiedAttribute)) {
591  // attribute exists => replace it
592  msgText.replace(matcher.start(), matcher.end(), modifiedAttribute);
593  setModified();
594  }
595  }
596 
597  @Override
598  public boolean isPointValid(@Nullable final Point pos) {
599  return pos != null && pos.x >= 0 && pos.y >= 0 && pos.x < mapSize.getWidth() && pos.y < mapSize.getHeight();
600  }
601 
602 }
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getEnter
Point getEnter()
Definition: AbstractMapArchObject.java:270
net.sf.gridarta.utils.Size2D.getWidth
int getWidth()
Returns the width of the area.
Definition: Size2D.java:96
net.sf.gridarta.model.direction.Direction
A direction.
Definition: Direction.java:28
name
name
Definition: ArchetypeTypeSetParserTest-ignoreDefaultAttribute1-result.txt:2
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.MAP_FILE_NAME_PATTERN
static final Pattern MAP_FILE_NAME_PATTERN
The pattern used to determine the base map name and its x/y/z coordinates from a filename.
Definition: AbstractMapArchObject.java:77
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getText
String getText()
Definition: AbstractMapArchObject.java:576
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.resetTimeout
int resetTimeout
The number of ticks that need to elapse before this map will be reset.
Definition: AbstractMapArchObject.java:115
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.enterX
int enterX
The x coordinate for entering the map.
Definition: AbstractMapArchObject.java:100
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.beginTransaction
void beginTransaction()
Definition: AbstractMapArchObject.java:496
net.sf.gridarta.model.mapmodel.AbsoluteMapPath
A MapPath that is absolute, that is, it starts with a "/".
Definition: AbsoluteMapPath.java:29
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.equals
boolean equals(@Nullable final Object obj)
Definition: AbstractMapArchObject.java:461
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.isPointValid
boolean isPointValid(@Nullable final Point pos)
Definition: AbstractMapArchObject.java:598
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.hashCode
int hashCode()
Definition: AbstractMapArchObject.java:473
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.serialVersionUID
static final long serialVersionUID
The serial version UID.
Definition: AbstractMapArchObject.java:51
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.calculateTilePaths
void calculateTilePaths(@Nullable final MapFile mapFile, @NotNull final File mapsDirectory)
Definition: AbstractMapArchObject.java:411
net.sf
net.sf.gridarta.model.maparchobject.MapArchObjectListener
Interface for listeners listening on map arch object changes.
Definition: MapArchObjectListener.java:30
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.mapName
String mapName
The name of this map.
Definition: AbstractMapArchObject.java:95
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.addText
void addText(@NotNull final String text)
Definition: AbstractMapArchObject.java:554
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getEnterY
int getEnterY()
Definition: AbstractMapArchObject.java:254
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.isFixedReset
boolean isFixedReset()
Definition: AbstractMapArchObject.java:335
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getSwapTime
int getSwapTime()
Definition: AbstractMapArchObject.java:305
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getMapName
String getMapName()
Definition: AbstractMapArchObject.java:223
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.enterY
int enterY
The y coordinate for entering the map.
Definition: AbstractMapArchObject.java:105
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.endTransaction
void endTransaction()
Definition: AbstractMapArchObject.java:511
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setMapName
void setMapName(@NotNull final String name)
Definition: AbstractMapArchObject.java:228
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getTilePaths
int getTilePaths()
Definition: AbstractMapArchObject.java:365
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setFixedReset
void setFixedReset(final boolean fixedReset)
Definition: AbstractMapArchObject.java:340
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.mapSize
Size2D mapSize
The size of the map reflected by this map arch object.
Definition: AbstractMapArchObject.java:89
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setSwapTime
void setSwapTime(final int swapTime)
Definition: AbstractMapArchObject.java:310
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setMapSize
void setMapSize(@NotNull final Size2D mapSize)
Definition: AbstractMapArchObject.java:209
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.difficulty
int difficulty
The map difficulty.
Definition: AbstractMapArchObject.java:126
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getEnterX
int getEnterX()
Definition: AbstractMapArchObject.java:239
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.addMapArchObjectListener
void addMapArchObjectListener(@NotNull final MapArchObjectListener listener)
Definition: AbstractMapArchObject.java:478
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getDifficulty
int getDifficulty()
Definition: AbstractMapArchObject.java:320
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.MODIFIED_ATTRIBUTE
static final String MODIFIED_ATTRIBUTE
The prefix for the map attribute that is updated with the last modification timestamp.
Definition: AbstractMapArchObject.java:64
net
net.sf.gridarta.utils.Size2D.getHeight
int getHeight()
Returns the height of the area.
Definition: Size2D.java:104
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setResetTimeout
void setResetTimeout(final int resetTimeout)
Definition: AbstractMapArchObject.java:295
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setText
void setText(final String text)
Definition: AbstractMapArchObject.java:564
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setState
void setState(@NotNull final A mapArchObject)
Definition: AbstractMapArchObject.java:442
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setEnterX
void setEnterX(final int enterX)
Definition: AbstractMapArchObject.java:244
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.endTransaction
void endTransaction(final boolean fireEvent)
Definition: AbstractMapArchObject.java:516
net.sf.gridarta.utils.Size2D.ONE
static final Size2D ONE
One size object.
Definition: Size2D.java:40
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getMapSize
Size2D getMapSize()
Definition: AbstractMapArchObject.java:204
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getResetTimeout
int getResetTimeout()
Definition: AbstractMapArchObject.java:290
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.updateModifiedAttribute
void updateModifiedAttribute(@NotNull final String userName)
Definition: AbstractMapArchObject.java:581
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.MODIFIED_ATTRIBUTE_PATTERN
static final Pattern MODIFIED_ATTRIBUTE_PATTERN
The pattern to find the MODIFIED_ATTRIBUTE in the message text.
Definition: AbstractMapArchObject.java:70
net.sf.gridarta.model.mapmodel.MapPath
Represents a maps directory local map path.
Definition: MapPath.java:31
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.fireMetaChangedEvent
void fireMetaChangedEvent()
Fires a MapMetaChangedEvent.
Definition: AbstractMapArchObject.java:547
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setEnterY
void setEnterY(final int enterY)
Definition: AbstractMapArchObject.java:259
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getDarkness
int getDarkness()
Definition: AbstractMapArchObject.java:350
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.fixedReset
boolean fixedReset
If nonzero, the map reset time will not be updated when someone enters / exits the map.
Definition: AbstractMapArchObject.java:132
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.removeMapArchObjectListener
void removeMapArchObjectListener(@NotNull final MapArchObjectListener listener)
Definition: AbstractMapArchObject.java:483
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.tilePaths
final String[] tilePaths
The map tile paths used for map tiling.
Definition: AbstractMapArchObject.java:145
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.commitTransaction
void commitTransaction()
Performs ending a transaction.
Definition: AbstractMapArchObject.java:535
net.sf.gridarta.model.mapmodel.MapFile
The location of a map file with a map directory.
Definition: MapFile.java:31
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.transactionDepth
int transactionDepth
The transaction depth.
Definition: AbstractMapArchObject.java:159
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.swapTime
int swapTime
The number of ticks that must elapse after tha map has not been used before it gets swapped out.
Definition: AbstractMapArchObject.java:121
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setDifficulty
void setDifficulty(final int difficulty)
Definition: AbstractMapArchObject.java:325
net.sf.gridarta.model
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setModified
void setModified()
Marks this map arch object as changed.
Definition: AbstractMapArchObject.java:491
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.AbstractMapArchObject
AbstractMapArchObject(@NotNull final AbstractMapArchObject< A > mapArchObject)
Creates a new instance as a copy of another map arch object.
Definition: AbstractMapArchObject.java:187
net.sf.gridarta.model.maparchobject.AbstractMapArchObject
Base implementation of MapArchObject that covers similarities between Crossfire maps and Daimonin map...
Definition: AbstractMapArchObject.java:46
net.sf.gridarta.model.mapmodel.MapPath.getRelativeMapPathFrom
RelativeMapPath getRelativeMapPathFrom(@NotNull AbsoluteMapPath mapPath)
Returns this map path relative to another map path.
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setDarkness
void setDarkness(final int darkness)
Definition: AbstractMapArchObject.java:355
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.AbstractMapArchObject
AbstractMapArchObject()
Creates a new instance.
Definition: AbstractMapArchObject.java:176
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.isOutdoor
boolean isOutdoor()
Definition: AbstractMapArchObject.java:275
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.darkness
int darkness
The light / darkness of map (overall).
Definition: AbstractMapArchObject.java:137
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.isTilePathAuto
boolean isTilePathAuto(@NotNull final Direction direction, @Nullable final MapFile mapFile)
Definition: AbstractMapArchObject.java:437
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setTilePath
void setTilePath(@NotNull final Direction direction, @NotNull final String tilePath)
Definition: AbstractMapArchObject.java:376
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.setOutdoor
void setOutdoor(final boolean outdoor)
Definition: AbstractMapArchObject.java:280
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.getTilePath
String getTilePath(@NotNull final Direction direction)
Definition: AbstractMapArchObject.java:371
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.listenerList
final Collection< MapArchObjectListener > listenerList
The registered event listeners.
Definition: AbstractMapArchObject.java:151
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.MAP_NAME_UNNAMED
static final String MAP_NAME_UNNAMED
The name of an unnamed map.
Definition: AbstractMapArchObject.java:57
net.sf.gridarta.utils.Size2D.hashCode
int hashCode()
Definition: Size2D.java:88
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.attributeHasChanged
boolean attributeHasChanged
Set if any attribute has changed inside the current transaction.
Definition: AbstractMapArchObject.java:171
net.sf.gridarta.utils.Size2D
The class Size2D represents a 2d rectangular area.
Definition: Size2D.java:30
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.outdoor
boolean outdoor
If set, this is an outdoor map.
Definition: AbstractMapArchObject.java:110
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.model.direction
Definition: Direction.java:20
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.calculateTilePath
String calculateTilePath(@NotNull final Direction direction, @Nullable final MapFile mapFile)
Definition: AbstractMapArchObject.java:387
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.msgText
final StringBuilder msgText
The map text.
Definition: AbstractMapArchObject.java:83
net.sf.gridarta.model.maparchobject.AbstractMapArchObject.transactionThread
transient Thread transactionThread
The thread that performs the current transaction.
Definition: AbstractMapArchObject.java:166