Instance map improvements + moving

- Change instance map to resize on "fixed" layer so it can be layouted
- Scroll minimap only when mouse is in the minimap bounds

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-03-23 15:45:48 +01:00
parent 3d15de294b
commit 1554fe01e7
3 changed files with 27 additions and 70 deletions

View File

@@ -24,12 +24,11 @@
*/ */
package net.runelite.client.plugins.instancemap; package net.runelite.client.plugins.instancemap;
import java.awt.Dimension; import java.awt.Point;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelEvent;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Point;
import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyListener;
import net.runelite.client.input.MouseListener; import net.runelite.client.input.MouseListener;
import net.runelite.client.input.MouseWheelListener; import net.runelite.client.input.MouseWheelListener;
@@ -39,6 +38,9 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
@Inject @Inject
private InstanceMapPlugin plugin; private InstanceMapPlugin plugin;
@Inject
private InstanceMapOverlay overlay;
@Override @Override
public void keyTyped(KeyEvent event) public void keyTyped(KeyEvent event)
{ {
@@ -48,7 +50,7 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
@Override @Override
public void keyPressed(KeyEvent event) public void keyPressed(KeyEvent event)
{ {
if (!plugin.isMapShown()) if (!overlay.isMapShown())
{ {
return; return;
} }
@@ -69,7 +71,7 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
@Override @Override
public MouseWheelEvent mouseWheelMoved(MouseWheelEvent event) public MouseWheelEvent mouseWheelMoved(MouseWheelEvent event)
{ {
if (!plugin.isMapShown()) if (!overlay.isMapShown() || isNotWithinOverlay(event.getPoint()))
{ {
return event; return event;
} }
@@ -92,7 +94,7 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
@Override @Override
public MouseEvent mouseClicked(MouseEvent event) public MouseEvent mouseClicked(MouseEvent event)
{ {
if (!plugin.isMapShown() || !isWithinOverlay(event.getX(), event.getY())) if (!overlay.isMapShown() || isNotWithinOverlay(event.getPoint()))
{ {
return event; return event;
} }
@@ -104,7 +106,7 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
@Override @Override
public MouseEvent mousePressed(MouseEvent event) public MouseEvent mousePressed(MouseEvent event)
{ {
if (!plugin.isMapShown() || !isWithinOverlay(event.getX(), event.getY())) if (!overlay.isMapShown() || isNotWithinOverlay(event.getPoint()))
{ {
return event; return event;
} }
@@ -113,17 +115,8 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
return event; return event;
} }
private boolean isWithinOverlay(int x, int y) private boolean isNotWithinOverlay(final Point point)
{ {
Dimension dimm = plugin.getOverlaySize(); return !overlay.getBounds().contains(point);
if (dimm == null)
{
return false;
}
final Point offset = plugin.getMapOffset();
return (x >= offset.getX() && x <= offset.getX() + dimm.width &&
y >= offset.getY() && y <= offset.getY() + dimm.height);
} }
} }

View File

@@ -30,6 +30,7 @@ import java.awt.Graphics2D;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameObject; import net.runelite.api.GameObject;
import net.runelite.api.GroundObject; import net.runelite.api.GroundObject;
@@ -67,10 +68,11 @@ import static net.runelite.client.plugins.instancemap.WallOffset.NONE;
import static net.runelite.client.plugins.instancemap.WallOffset.TOP_LEFT; import static net.runelite.client.plugins.instancemap.WallOffset.TOP_LEFT;
import static net.runelite.client.plugins.instancemap.WallOffset.TOP_RIGHT; import static net.runelite.client.plugins.instancemap.WallOffset.TOP_RIGHT;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.ui.overlay.components.BackgroundComponent; import net.runelite.client.ui.overlay.components.BackgroundComponent;
@Singleton
class InstanceMapOverlay extends Overlay class InstanceMapOverlay extends Overlay
{ {
/** /**
@@ -93,7 +95,6 @@ class InstanceMapOverlay extends Overlay
private static final int MAX_PLANE = 3; private static final int MAX_PLANE = 3;
private static final int MIN_PLANE = 0; private static final int MIN_PLANE = 0;
private final InstanceMapPlugin plugin;
/** /**
* The plane to render on the instance map. When the map is opened this * The plane to render on the instance map. When the map is opened this
@@ -114,24 +115,11 @@ class InstanceMapOverlay extends Overlay
private final BackgroundComponent backgroundComponent = new BackgroundComponent(); private final BackgroundComponent backgroundComponent = new BackgroundComponent();
@Inject @Inject
InstanceMapOverlay(Client client, InstanceMapPlugin plugin) InstanceMapOverlay(Client client)
{ {
this.plugin = plugin;
this.client = client; this.client = client;
setPosition(OverlayPosition.DYNAMIC); setPriority(OverlayPriority.HIGH);
setLayer(OverlayLayer.ALWAYS_ON_TOP); setPosition(OverlayPosition.TOP_LEFT);
}
public Dimension getInstanceMapDimension()
{
BufferedImage image = mapImage;
if (image == null)
{
return null;
}
return new Dimension(image.getWidth(), image.getHeight());
} }
public boolean isMapShown() public boolean isMapShown()
@@ -207,16 +195,19 @@ class InstanceMapOverlay extends Overlay
} }
} }
final Point offset = plugin.getMapOffset(); graphics.drawImage(image, 0, 0, null);
graphics.drawImage(image, offset.getX(), offset.getY(), null);
if (client.getPlane() == viewedPlane)//If we are not viewing the plane we are on, don't show player's position if (client.getPlane() == viewedPlane)//If we are not viewing the plane we are on, don't show player's position
{ {
drawPlayerDot(graphics, offset.getX(), offset.getY(), client.getLocalPlayer(), Color.white, Color.black); drawPlayerDot(graphics, client.getLocalPlayer(), Color.white, Color.black);
} }
return getInstanceMapDimension(); if (image == null)
{
return null;
}
return new Dimension(image.getWidth(), image.getHeight());
} }
/** /**
@@ -224,7 +215,7 @@ class InstanceMapOverlay extends Overlay
* *
* @param graphics graphics to be drawn to * @param graphics graphics to be drawn to
*/ */
private void drawPlayerDot(Graphics2D graphics, int baseX, int baseY, Player player, private void drawPlayerDot(Graphics2D graphics, Player player,
Color dotColor, Color outlineColor) Color dotColor, Color outlineColor)
{ {
LocalPoint playerLoc = player.getLocalLocation(); LocalPoint playerLoc = player.getLocalLocation();
@@ -233,8 +224,8 @@ class InstanceMapOverlay extends Overlay
int tileX = playerLoc.getRegionX(); int tileX = playerLoc.getRegionX();
int tileY = (tiles[0].length - 1) - playerLoc.getRegionY(); // flip the y value int tileY = (tiles[0].length - 1) - playerLoc.getRegionY(); // flip the y value
int x = baseX + (int) (tileX * TILE_SIZE * MAP_SCALING); int x = (int) (tileX * TILE_SIZE * MAP_SCALING);
int y = baseY + (int) (tileY * TILE_SIZE * MAP_SCALING); int y = (int) (tileY * TILE_SIZE * MAP_SCALING);
graphics.setColor(dotColor); graphics.setColor(dotColor);
graphics.fillRect(x, y, PLAYER_MARKER_SIZE, PLAYER_MARKER_SIZE);//draw the players point on the map graphics.fillRect(x, y, PLAYER_MARKER_SIZE, PLAYER_MARKER_SIZE);//draw the players point on the map
graphics.setColor(outlineColor); graphics.setColor(outlineColor);

View File

@@ -26,10 +26,7 @@ package net.runelite.client.plugins.instancemap;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.google.inject.Binder; import com.google.inject.Binder;
import java.awt.Dimension;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.Point;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.MapRegionChanged; import net.runelite.api.events.MapRegionChanged;
import net.runelite.api.events.WidgetMenuOptionClicked; import net.runelite.api.events.WidgetMenuOptionClicked;
@@ -48,15 +45,8 @@ import net.runelite.client.ui.overlay.Overlay;
) )
public class InstanceMapPlugin extends Plugin public class InstanceMapPlugin extends Plugin
{ {
private static final int OVERLAY_POSITION_X = 5;
private static final int OVERLAY_POSITION_Y = 20;
private static final int FRAME_OFFSET = 4;
private final WidgetMenuOption openMapOption = new WidgetMenuOption("Show", "Instance Map", WidgetInfo.WORLD_MAP); private final WidgetMenuOption openMapOption = new WidgetMenuOption("Show", "Instance Map", WidgetInfo.WORLD_MAP);
@Inject
private Client client;
@Inject @Inject
private InstanceMapInputListener inputListener; private InstanceMapInputListener inputListener;
@@ -150,18 +140,6 @@ public class InstanceMapPlugin extends Plugin
return overlay; return overlay;
} }
public boolean isMapShown()
{
return overlay.isMapShown();
}
public Point getMapOffset()
{
return new Point(
OVERLAY_POSITION_X + (client.isResized() ? 0 : FRAME_OFFSET),
OVERLAY_POSITION_Y + (client.isResized() ? 0 : FRAME_OFFSET));
}
public void showMap() public void showMap()
{ {
overlay.setShowMap(true); overlay.setShowMap(true);
@@ -183,9 +161,4 @@ public class InstanceMapPlugin extends Plugin
{ {
overlay.onDescend(); overlay.onDescend();
} }
public Dimension getOverlaySize()
{
return overlay.getInstanceMapDimension();
}
} }