Gridarta Editor
IsoMapRenderer.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 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.gui.map.renderer;
21 
22 import java.awt.Color;
23 import java.awt.Graphics;
24 import java.awt.Graphics2D;
25 import java.awt.Point;
26 import javax.swing.Icon;
43 import org.jetbrains.annotations.NotNull;
44 
49 public class IsoMapRenderer<G extends DefaultIsoGameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractIsoMapRenderer<G, A, R> {
50 
54  private static final long serialVersionUID = 1L;
55 
56  @NotNull
58 
59  @NotNull
60  private final Color @NotNull [] highLightMask = { new Color(1.0f, 0.0f, 0.0f, 0.33f), new Color(0.0f, 1.0f, 0.0f, 0.33f), new Color(0.0f, 1.0f, 1.0f, 0.33f), };
61 
62  @NotNull
63  private final Icon emptySquareIcon;
64 
68  @NotNull
70 
74  @NotNull
76 
80  @NotNull
81  private final FilterState filterState = new FilterState();
82 
86  private final int @NotNull [] xPoints = new int[4];
87 
91  private final int @NotNull [] yPoints = new int[4];
92 
96  @NotNull
97  private final Point point = new Point();
98 
103  @NotNull
105 
106  @Override
107  public void configChanged(@NotNull final FilterConfigChangeType filterConfigChangeType, @NotNull final FilterConfig<?, ?> filterConfig) {
108  forceRepaint();
109  }
110 
111  };
112 
128  public IsoMapRenderer(final int spawnPointTypeNo, @NotNull final MapViewSettings mapViewSettings, @NotNull final FilterControl<G, A, R> filterControl, @NotNull final MapModel<G, A, R> mapModel, @NotNull final MapGrid mapGrid, @NotNull final MultiPositionData multiPositionData, @NotNull final IsoMapSquareInfo isoMapSquareInfo, @NotNull final GridMapSquarePainter gridMapSquarePainter, @NotNull final GameObjectParser<G, A, R> gameObjectParser, @NotNull final ResourceIcons resourceIcons) {
130  this.filterControl = filterControl;
131  emptySquareIcon = resourceIcons.getResourceIcon(ResourceIcons.SQUARE_EMPTY);
132  this.mapViewSettings = mapViewSettings;
133  this.isoMapSquareInfo = isoMapSquareInfo;
134  this.filterControl.addConfigListener(filterConfigListener);
135  }
136 
137  @Override
138  public void closeNotify() {
139  super.closeNotify();
141  }
142 
143  @Override
144  protected void clearBackground(@NotNull final Graphics g) {
145  }
146 
147  @Override
148  protected boolean isGameObjectVisible(@NotNull final G gameObject) {
149  return mapViewSettings.isEditType(gameObject);
150  }
151 
152  @Override
153  protected void paintSquare(@NotNull final Graphics2D g, final int x, final int y, @NotNull final MapSquare<G, A, R> square) {
154  point.setLocation(square.getMapX(), square.getMapY());
155  final int[] yOffsets = tileStretchingOffsets(point, foundSubLayers);
156  int highestSubLayer = 0;
157  for (int subLayer = 0; subLayer < yOffsets.length; subLayer++) {
158  if (yOffsets[subLayer] < yOffsets[highestSubLayer]) {
159  highestSubLayer = subLayer;
160  }
161  }
163  if (square.isEmpty()) {
164  emptySquareIcon.paintIcon(this, g, x, y + yOffsets[0]);
165  } else {
166  for (final G node : square) {
168  if (filterControl.canShow(node)) {
169  final G head = node.getHead();
170  final int subLayer;
171  if (head.getAttributeInt(DefaultIsoGameObject.LAYER) == 0) {
172  subLayer = highestSubLayer;
173  } else {
174  subLayer = head.getAttributeInt(DefaultIsoGameObject.SUB_LAYER);
175  }
176  paintGameObjectIfVisible(g, x, y + yOffsets[subLayer], node);
177  }
178  }
179  }
180  for (int subLayer = 0; subLayer < yOffsets.length; subLayer++) {
181  if (!foundSubLayers[subLayer]) {
182  continue;
183  }
184 
185  for (int i = 0; i < FilterControl.MAX_HIGHLIGHT; i++) {
187  final Color color = g.getColor();
188  g.setColor(highLightMask[i]);
189  xPoints[0] = x + isoMapSquareInfo.getXLen() / 2;
190  xPoints[1] = x + isoMapSquareInfo.getXLen() - 1;
191  xPoints[2] = xPoints[0];
192  xPoints[3] = x;
193  yPoints[0] = y + yOffsets[subLayer];
194  yPoints[1] = y + yOffsets[subLayer] + isoMapSquareInfo.getYLen() / 2;
195  yPoints[2] = y + yOffsets[subLayer] + isoMapSquareInfo.getYLen() - 1;
196  yPoints[3] = yPoints[1];
197  g.fillPolygon(xPoints, yPoints, 4);
198  g.setColor(color);
199  }
200  }
201  }
202  }
203 
204 }
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.yPoints
final int[] yPoints
Definition: IsoMapRenderer.java:91
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.filterState
final FilterState filterState
Definition: IsoMapRenderer.java:81
net.sf.gridarta.model.mapmodel.MapModel
Definition: MapModel.java:75
net.sf.gridarta.model.gameobject.DefaultIsoGameObject
Definition: DefaultIsoGameObject.java:38
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.clearBackground
void clearBackground(@NotNull final Graphics g)
Definition: IsoMapRenderer.java:144
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.isGameObjectVisible
boolean isGameObjectVisible(@NotNull final G gameObject)
Definition: IsoMapRenderer.java:148
net.sf.gridarta.gui.filter.FilterControl.newSquare
void newSquare(@NotNull FilterState filterState)
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::multiPositionData
final MultiPositionData multiPositionData
Definition: AbstractIsoMapRenderer.java:142
net.sf.gridarta
net.sf.gridarta.gui.filter.FilterState
Definition: FilterState.java:29
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::tileStretchingOffsets
int[] tileStretchingOffsets( @NotNull final Point point, final boolean @NotNull[] foundSubLayers)
Definition: AbstractIsoMapRenderer.java:823
net.sf.gridarta.model.mapmodel.MapSquare
Definition: MapSquare.java:45
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::mapGrid
final MapGrid mapGrid
Definition: AbstractIsoMapRenderer.java:113
net.sf.gridarta.model.mapviewsettings
Definition: AbstractMapViewSettings.java:20
net.sf.gridarta.model.gameobject.IsoMapSquareInfo
Definition: IsoMapSquareInfo.java:26
net.sf
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.isoMapSquareInfo
final IsoMapSquareInfo isoMapSquareInfo
Definition: IsoMapRenderer.java:75
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.xPoints
final int[] xPoints
Definition: IsoMapRenderer.java:86
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::paintGameObjectIfVisible
void paintGameObjectIfVisible( @NotNull final Graphics2D g, final int xStart, final int yStart, @NotNull final G gameObject)
Definition: AbstractIsoMapRenderer.java:550
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.filterControl
final FilterControl< G, A, R > filterControl
Definition: IsoMapRenderer.java:57
net.sf.gridarta.model.gameobject.DefaultIsoGameObject.SUB_LAYER
static final String SUB_LAYER
Definition: DefaultIsoGameObject.java:67
net.sf.gridarta.model.filter.FilterConfigChangeType
Definition: FilterConfigChangeType.java:26
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.highLightMask
final Color[] highLightMask
Definition: IsoMapRenderer.java:60
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.utils.ResourceIcons.SQUARE_EMPTY
static final String SQUARE_EMPTY
Definition: ResourceIcons.java:80
net.sf.gridarta.model.mapviewsettings.MapViewSettings
Definition: MapViewSettings.java:30
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.point
final Point point
Definition: IsoMapRenderer.java:97
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::spawnPointTypeNo
final int spawnPointTypeNo
Definition: AbstractIsoMapRenderer.java:82
net.sf.gridarta.gui.map.renderer.GridMapSquarePainter
Definition: GridMapSquarePainter.java:34
net.sf.gridarta.model.filter.FilterConfigListener
Definition: FilterConfigListener.java:30
net.sf.gridarta.gui
net.sf.gridarta.gui.filter
Definition: BtnPopup.java:20
net.sf.gridarta.model.gameobject.IsoMapSquareInfo.getXLen
int getXLen()
Definition: IsoMapSquareInfo.java:66
net.sf.gridarta.model.filter.FilterConfig
Definition: FilterConfig.java:29
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::mapModel
final MapModel< G, A, R > mapModel
Definition: AbstractIsoMapRenderer.java:101
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.serialVersionUID
static final long serialVersionUID
Definition: IsoMapRenderer.java:54
net.sf.gridarta.gui.filter.FilterControl.canShow
boolean canShow(@NotNull G gameObject)
net.sf.gridarta.gui.filter.FilterControl.isHighlightedSquare
boolean isHighlightedSquare(@NotNull FilterState filterState, int path)
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.model.mapviewsettings.MapViewSettings.isEditType
boolean isEditType(int editType)
net.sf.gridarta.model.filter
Definition: AbstractFilterConfig.java:20
net.sf.gridarta.gui.filter.FilterControl.objectInSquare
void objectInSquare(@NotNull FilterState filterState, @NotNull G gameObject)
net.sf.gridarta.model.gameobject.DefaultIsoGameObject.LAYER
static final String LAYER
Definition: DefaultIsoGameObject.java:61
net.sf.gridarta.model.io
Definition: AbstractArchetypeParser.java:20
net.sf.gridarta.utils.ResourceIcons.SQUARE_UNKNOWN
static final String SQUARE_UNKNOWN
Definition: ResourceIcons.java:83
net.sf.gridarta.model.mapgrid.MapGrid
Definition: MapGrid.java:46
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::forceRepaint
void forceRepaint()
Definition: AbstractIsoMapRenderer.java:455
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.IsoMapRenderer
IsoMapRenderer(final int spawnPointTypeNo, @NotNull final MapViewSettings mapViewSettings, @NotNull final FilterControl< G, A, R > filterControl, @NotNull final MapModel< G, A, R > mapModel, @NotNull final MapGrid mapGrid, @NotNull final MultiPositionData multiPositionData, @NotNull final IsoMapSquareInfo isoMapSquareInfo, @NotNull final GridMapSquarePainter gridMapSquarePainter, @NotNull final GameObjectParser< G, A, R > gameObjectParser, @NotNull final ResourceIcons resourceIcons)
Definition: IsoMapRenderer.java:128
net.sf.gridarta.model.gameobject.IsoMapSquareInfo.getYLen
int getYLen()
Definition: IsoMapSquareInfo.java:82
net.sf.gridarta.model.mapgrid
Definition: MapGrid.java:20
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.paintSquare
void paintSquare(@NotNull final Graphics2D g, final int x, final int y, @NotNull final MapSquare< G, A, R > square)
Definition: IsoMapRenderer.java:153
net.sf.gridarta.gui.filter.FilterControl
Definition: FilterControl.java:33
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::foundSubLayers
final boolean[] foundSubLayers
Definition: AbstractIsoMapRenderer.java:170
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.filter.FilterControl.removeConfigListener
void removeConfigListener(@NotNull FilterConfigListener listener)
net.sf.gridarta.gui.filter.FilterControl.MAX_HIGHLIGHT
int MAX_HIGHLIGHT
Definition: FilterControl.java:35
net.sf.gridarta.model.gameobject.MultiPositionData
Definition: MultiPositionData.java:44
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.utils.ResourceIcons
Definition: ResourceIcons.java:46
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.filterConfigListener
final FilterConfigListener filterConfigListener
Definition: IsoMapRenderer.java:104
net.sf.gridarta.model.io.GameObjectParser
Definition: GameObjectParser.java:37
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.closeNotify
void closeNotify()
Definition: IsoMapRenderer.java:138
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer< G, A, R >::gridMapSquarePainter
final GridMapSquarePainter gridMapSquarePainter
Definition: AbstractIsoMapRenderer.java:154
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.map.renderer.AbstractIsoMapRenderer
Definition: AbstractIsoMapRenderer.java:66
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.mapViewSettings
final MapViewSettings mapViewSettings
Definition: IsoMapRenderer.java:69
net.sf.gridarta.gui.map.renderer.IsoMapRenderer
Definition: IsoMapRenderer.java:49
net.sf.gridarta.gui.map.renderer.IsoMapRenderer.emptySquareIcon
final Icon emptySquareIcon
Definition: IsoMapRenderer.java:63