jNetClient/src/jnet/client/gui/mapview/MapView.java

131 lines
3.8 KiB
Java

package jnet.client.gui.mapview;
import jnet.client.Client;
import jnet.client.network.NettyClient;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.Timer;
import jnet.lib.LogFile;
import jnet.lib.object.Connection;
import jnet.lib.object.Map;
import jnet.lib.object.MapObject;
public class MapView extends JPanel {
public static List<PaintObject> paintObjects = new ArrayList<>();
public static List<PaintConnection> paintConnection = new ArrayList<>();
private BufferedImage lockImage;
private BufferedImage unlockImage;
private static Map map;
public MapView(Map map) {
this.map = map;
LogFile.printDebug("View map: " + map.getName());
paintObjects.clear();
paintConnection.clear();
try {
lockImage = ImageIO.read(getClass().getResourceAsStream("/img/lock.png"));
unlockImage = ImageIO.read(getClass().getResourceAsStream("/img/unlock.png"));
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
loadConnection(map.getId());
loadObject(map.getId());
this.addMouseMotionListener(new MapViewAction(map));
this.addMouseListener(new MapViewAction(map));
// periodicke prekreslovani
Timer timer = new Timer(100, (ActionEvent ae) -> {
if (NettyClient.isConnected()) {
this.setBackground(Color.white);
} else {
this.setBackground(Color.LIGHT_GRAY);
}
repaint();
});
timer.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
// vykresleni lock/unlock mapy
g.drawImage(map.isLock() ? lockImage : unlockImage, 0, 0, this);
// vykresleni stavajicich propojeni
for (PaintConnection c : paintConnection) {
c.paint(g2);
}
// Kreslení nového propojení
if (MapViewAction.createConnection && MapViewAction.startConMapObject != null && MapViewAction.endConnPoint != null) {
g.setColor(Color.RED); // Barva propojení
g.drawLine(
MapViewAction.startConMapObject.getPoint().x, MapViewAction.startConMapObject.getPoint().y,
MapViewAction.endConnPoint.x, MapViewAction.endConnPoint.y
);
}
// vykresleni objektu
for (PaintObject paintObject : paintObjects) {
paintObject.paint(g2);
}
}
public static void updateMapView(Map map) {
if (map.equals(MapView.map)) {
// obnoveni objektu
paintObjects.clear();
// nahrat objekty
loadObject(map.getId());
}
}
public static void updateMapView() {
if (map.equals(MapView.map)) {
// obnoveni objektu
paintObjects.clear();
// nahrat objekty
loadObject(map.getId());
}
}
private static void loadObject(int mapId) {
for (Map map : Client.maps) {
for (MapObject obj : map.getObjects()) {
if (obj.getMap() == mapId) {
paintObjects.add(new PaintObject(obj));
}
}
}
}
private static void loadConnection(int mapId) {
for (Map map : Client.maps) {
for (Connection con : map.getConnection()) {
if (con.getMap() == mapId) {
paintConnection.add(new PaintConnection(con));
}
}
}
}
}