barrows plugin: add puzzle solver

This commit is contained in:
SebastiaanVanspauwen
2019-04-19 00:20:09 +02:00
committed by Adam
parent 8bf22ef401
commit c06f8c891e
5 changed files with 80 additions and 1 deletions

View File

@@ -86,4 +86,15 @@ public interface BarrowsConfig extends Config
{
return Color.RED;
}
@ConfigItem(
keyName = "showPuzzleAnswer",
name = "Show Puzzle Answer",
description = "Configures if the puzzle answer should be shown.",
position = 5
)
default boolean showPuzzleAnswer()
{
return true;
}
}

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.barrows;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.List;
import javax.inject.Inject;
import net.runelite.api.Client;
@@ -38,6 +39,7 @@ import net.runelite.api.Perspective;
import net.runelite.api.Player;
import net.runelite.api.WallObject;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.widgets.Widget;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
@@ -66,6 +68,7 @@ class BarrowsOverlay extends Overlay
Player local = client.getLocalPlayer();
final Color npcColor = getMinimapDotColor(1);
final Color playerColor = getMinimapDotColor(2);
Widget puzzleAnswer = plugin.getPuzzleAnswer();
// tunnels are only on z=0
if (!plugin.getWalls().isEmpty() && client.getPlane() == 0 && config.showMinimap())
@@ -119,6 +122,13 @@ class BarrowsOverlay extends Overlay
renderBarrowsBrothers(graphics);
}
if (puzzleAnswer != null && config.showPuzzleAnswer() && !puzzleAnswer.isHidden())
{
Rectangle answerRect = puzzleAnswer.getBounds();
graphics.setColor(Color.GREEN);
graphics.draw(answerRect);
}
return null;
}

View File

@@ -24,6 +24,7 @@
*/
package net.runelite.client.plugins.barrows;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.inject.Provides;
import java.util.HashSet;
@@ -82,6 +83,11 @@ public class BarrowsPlugin extends Plugin
);
private static final Set<Integer> BARROWS_LADDERS = Sets.newHashSet(NullObjectID.NULL_20675, NullObjectID.NULL_20676, NullObjectID.NULL_20677);
private static final ImmutableList<WidgetInfo> POSSIBLE_SOLUTIONS = ImmutableList.of(
WidgetInfo.BARROWS_PUZZLE_ANSWER1,
WidgetInfo.BARROWS_PUZZLE_ANSWER2,
WidgetInfo.BARROWS_PUZZLE_ANSWER3
);
@Getter(AccessLevel.PACKAGE)
private final Set<WallObject> walls = new HashSet<>();
@@ -89,6 +95,9 @@ public class BarrowsPlugin extends Plugin
@Getter(AccessLevel.PACKAGE)
private final Set<GameObject> ladders = new HashSet<>();
@Getter
private Widget puzzleAnswer;
@Inject
private OverlayManager overlayManager;
@@ -130,6 +139,7 @@ public class BarrowsPlugin extends Plugin
overlayManager.remove(brotherOverlay);
walls.clear();
ladders.clear();
puzzleAnswer = null;
// Restore widgets
final Widget potential = client.getWidget(WidgetInfo.BARROWS_POTENTIAL);
@@ -213,6 +223,7 @@ public class BarrowsPlugin extends Plugin
// on region changes the tiles get set to null
walls.clear();
ladders.clear();
puzzleAnswer = null;
}
}
@@ -243,5 +254,21 @@ public class BarrowsPlugin extends Plugin
.runeLiteFormattedMessage(message.build())
.build());
}
else if (event.getGroupId() == WidgetID.BARROWS_PUZZLE_GROUP_ID)
{
final int answer = client.getWidget(WidgetInfo.BARROWS_FIRST_PUZZLE).getModelId() - 3;
puzzleAnswer = null;
for (WidgetInfo puzzleNode : POSSIBLE_SOLUTIONS)
{
final Widget widgetToCheck = client.getWidget(puzzleNode);
if (widgetToCheck != null && widgetToCheck.getModelId() == answer)
{
puzzleAnswer = client.getWidget(puzzleNode);
break;
}
}
}
}
}