20 package net.sf.gridarta.model.mapmanager;
23 import java.io.IOException;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.concurrent.CopyOnWriteArrayList;
41 import org.jetbrains.annotations.NotNull;
42 import org.jetbrains.annotations.Nullable;
82 private final List<MapControl<G, A, R>>
mapControls =
new CopyOnWriteArrayList<>();
87 private final Collection<MapManagerListener<G, A, R>>
listenerList =
new CopyOnWriteArrayList<>();
112 faceObjectProviders.addFaceObjectProvidersListener(faceObjectProvidersListener);
126 listener.mapCreated(mapControl, interactive);
157 listener.mapClosing(mapControl);
159 assert mapControl.getUseCounter() <= 0;
165 listener.mapClosed(mapControl);
167 mapControl.getMapModel().mapClosed();
176 final MapFile tmpMapFile = mapControl.getMapModel().getMapFile();
177 if (tmpMapFile !=
null && tmpMapFile.
equals(mapFile)) {
178 mapControl.acquire();
208 }
catch (
final OutOfMemoryError ex) {
209 throw new IOException(
"out of memory", ex);
212 int outOfMapBoundsDeleted = 0;
213 final StringBuilder outOfMapBoundsObjects =
new StringBuilder();
217 while (
it.hasNext()) {
220 final int minX = gameObject.
getHead().getMapX() + gameObject.
getMinX();
221 final int minY = gameObject.
getHead().getMapY() + gameObject.
getMinY();
222 final int maxX = gameObject.
getHead().getMapX() + gameObject.
getMaxX();
223 final int maxY = gameObject.
getHead().getMapY() + gameObject.
getMaxY();
224 if (minX < 0 || minY < 0 || maxX >= mapWidth || maxY >= mapHeight) {
226 if (gameObject.
isHead()) {
227 outOfMapBoundsDeleted++;
229 outOfMapBoundsObjects.append(
'\n');
230 outOfMapBoundsObjects.append(gameObject.
getBestName());
231 outOfMapBoundsObjects.append(
" at ");
232 outOfMapBoundsObjects.append(minX).append(
'/').append(minY);
233 if (minX != maxX || minY != maxY) {
234 outOfMapBoundsObjects.append(
"..");
235 outOfMapBoundsObjects.append(maxX).append(
'/').append(maxY);
238 outOfMapBoundsObjects.append(
"\n...");
244 if (interactive && outOfMapBoundsDeleted > 0) {
293 final MapFile mapFile = mapControl.getMapModel().getMapFile();
294 if (mapFile ==
null) {
304 mapArchObject.beginTransaction();
308 mapArchObject.endTransaction();
321 if (mapControl ==
null) {
326 if (mapFile ==
null) {
330 return mapFile.
getFile().getParentFile();
335 mapControl.release();
336 if (mapControl.getUseCounter() <= 0) {