package rs.controller; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.FileImageInputStream; import javax.imageio.stream.ImageInputStream; public class WorldMap { public BufferedImage world_map; public int x = 2150, y = 1300, zoom = 1; private FileImageInputStream is; private ImageReader imageReader; private ImageReadParam readParameters; private int previousX; private int previousY; public void mousePressed(MouseEvent e) { previousX = e.getX(); previousY = e.getY(); } public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2) zoom = (zoom == 1) ? 2 : 1; } public void mouseDragged(MouseEvent e) { int xx = e.getX(); int yy = e.getY(); if(e.getX() < previousX) { if(x + (previousX - xx)/zoom < 3967) x += (previousX - xx)/zoom; } else if(xx > previousX) { if(x - (xx - previousX)/zoom > 0) x -= (xx - previousX)/zoom; } if (yy < previousY) { if(y + (previousY - yy)/zoom < 3583) y += (previousY - yy)/zoom; } else if (yy > previousY) { if(y - (yy - previousY)/zoom > 0) y -= (yy - previousY)/zoom; } world_map = loadFrame(x, y, 770, 535); previousX = xx; previousY = yy; } public WorldMap() { try { ImageInputStream is = ImageIO.createImageInputStream(getClass().getResourceAsStream("/worldmap.jpg")); imageReader = ImageIO.getImageReaders(is).next(); imageReader.setInput(is, false, true); readParameters = imageReader.getDefaultReadParam(); world_map = loadFrame(x, y, 770, 535); } catch(Exception e) { e.printStackTrace(); } } private BufferedImage loadFrame(int x, int y, int w, int h) { readParameters.setSourceRegion(new Rectangle(x, y, w, h)); try { return imageReader.read(0, readParameters); } catch (IOException ex) { return null; } } public void render(Graphics g) { g.setColor(Color.black); g.drawImage(world_map, 0, 0, 770 * zoom, 535 * zoom, null); } }