00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.gui.map;
00023
00024 import com.realtime.crossfire.jxclient.faces.FacesProvider;
00025 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00026 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00027 import com.realtime.crossfire.jxclient.map.CfMap;
00028 import com.realtime.crossfire.jxclient.map.CfMapSquare;
00029 import com.realtime.crossfire.jxclient.map.MapUpdaterState;
00030 import java.awt.Color;
00031 import java.awt.Dimension;
00032 import java.awt.Graphics;
00033 import org.jetbrains.annotations.NotNull;
00034 import org.jetbrains.annotations.Nullable;
00035
00041 public class GUIMiniMap extends AbstractGUIMap {
00042
00046 private static final long serialVersionUID = 1;
00047
00051 @NotNull
00052 private final MapUpdaterState mapUpdaterState;
00053
00057 private final int width;
00058
00062 private final int height;
00063
00067 private final int tileSize;
00068
00072 @NotNull
00073 private static final Color[] TILE_COLORS = {
00074 Color.BLACK,
00075 Color.WHITE,
00076 Color.BLUE,
00077 Color.RED,
00078 Color.GREEN,
00079 Color.YELLOW,
00080 Color.PINK,
00081 Color.GRAY,
00082 Color.ORANGE,
00083 Color.CYAN,
00084 Color.MAGENTA,
00085 Color.DARK_GRAY,
00086 Color.DARK_GRAY,
00087 Color.DARK_GRAY,
00088 Color.DARK_GRAY,
00089 Color.DARK_GRAY,
00090 };
00091
00102 public GUIMiniMap(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final MapUpdaterState mapUpdaterState, @NotNull final FacesProvider facesProvider, final int width, final int height) {
00103 super(tooltipManager, elementListener, name, mapUpdaterState, facesProvider, null);
00104 this.mapUpdaterState = mapUpdaterState;
00105 this.width = width;
00106 this.height = height;
00107 tileSize = facesProvider.getSize();
00108 }
00109
00113 @Override
00114 protected void paintSquareBackground(@NotNull final Graphics g, final int px, final int py, final boolean hasImage, @NotNull final CfMapSquare mapSquare) {
00115 final Color color;
00116 if (hasImage) {
00117 color = Color.BLACK;
00118 } else {
00119 final int colorIndex = mapSquare.getColor();
00120 color = 0 <= colorIndex && colorIndex < TILE_COLORS.length ? TILE_COLORS[colorIndex] : Color.BLACK;
00121 }
00122 paintColoredSquare(g, color, px, py);
00123 }
00124
00128 @Override
00129 protected void markPlayer(@NotNull final Graphics g, final int dx, final int dy) {
00130 if (dx != 0 || dy != 0) {
00131 final int playerOffsetX = (getMapWidth()-1)/2;
00132 final int playerOffsetY = (getMapHeight()-1)/2;
00133 final int mapSquareX = playerOffsetX-dx;
00134 final int mapSquareY = playerOffsetY-dy;
00135 final CfMap map = mapUpdaterState.getMap();
00136
00137 synchronized (map) {
00138 redrawSquare(g, map.getMapSquare(mapSquareX, mapSquareY), map, mapSquareX, mapSquareY);
00139 }
00140 }
00141 g.setColor(Color.RED);
00142 g.fillRect(getPlayerX(), getPlayerY(), tileSize, tileSize);
00143 }
00144
00148 @Nullable
00149 @Override
00150 public Dimension getPreferredSize() {
00151 return new Dimension(width*tileSize, height*tileSize);
00152 }
00153
00154 }