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.faces.SmoothFaces;
00026 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00027 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00028 import com.realtime.crossfire.jxclient.map.CfMapSquare;
00029 import com.realtime.crossfire.jxclient.map.MapUpdaterState;
00030 import com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection;
00031 import com.realtime.crossfire.jxclient.util.MathUtils;
00032 import java.awt.Color;
00033 import java.awt.Dimension;
00034 import java.awt.Graphics;
00035 import java.awt.event.MouseEvent;
00036 import org.jetbrains.annotations.NotNull;
00037 import org.jetbrains.annotations.Nullable;
00038
00045 public class GUIMap extends AbstractGUIMap {
00046
00050 private static final long serialVersionUID = 1;
00051
00055 @NotNull
00056 private final CrossfireServerConnection crossfireServerConnection;
00057
00061 private final int tileSize;
00062
00073 public GUIMap(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final MapUpdaterState mapUpdaterState, @NotNull final FacesProvider facesProvider, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final SmoothFaces smoothFaces) {
00074 super(tooltipManager, elementListener, name, mapUpdaterState, facesProvider, new SmoothingRenderer(smoothFaces, facesProvider));
00075 this.crossfireServerConnection = crossfireServerConnection;
00076 tileSize = facesProvider.getSize();
00077 }
00078
00082 @Override
00083 protected void paintSquareBackground(@NotNull final Graphics g, final int px, final int py, final boolean hasImage, @NotNull final CfMapSquare mapSquare) {
00084 paintColoredSquare(g, Color.BLACK, px, py);
00085 }
00086
00090 @Override
00091 protected void markPlayer(@NotNull final Graphics g, final int dx, final int dy) {
00092 }
00093
00097 @Override
00098 public void mouseClicked(@NotNull final MouseEvent e) {
00099 super.mouseClicked(e);
00100 switch (e.getButton()) {
00101 case MouseEvent.BUTTON1:
00102 final int dx1 = e.getX()-getOffsetX();
00103 final int dy1 = e.getY()-getOffsetY();
00104 if (dx1 >= 0 && dy1 >= 0) {
00105 final int mapWidth = getMapWidth();
00106 final int mapHeight = getMapHeight();
00107 final int dx2 = dx1/tileSize-mapWidth/2;
00108 final int dy2 = dy1/tileSize-mapHeight/2;
00109 if (dx2 < mapWidth && dy2 < mapHeight) {
00110 crossfireServerConnection.sendLookat(dx2, dy2);
00111 }
00112 }
00113 break;
00114
00115 case MouseEvent.BUTTON2:
00116 case MouseEvent.BUTTON3:
00117 break;
00118 }
00119 }
00120
00124 @Nullable
00125 @Override
00126 public Dimension getPreferredSize() {
00127 return new Dimension(getMapWidth()*tileSize, getMapHeight()*tileSize);
00128 }
00129
00134 public int getPreferredMapWidth() {
00135 return MathUtils.divRoundUp(getWidth(), tileSize);
00136 }
00137
00142 public int getPreferredMapHeight() {
00143 return MathUtils.divRoundUp(getHeight(), tileSize);
00144 }
00145
00146 }