diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java index 2c57b72..3cd158a 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java @@ -1,6 +1,8 @@ package com.toofifty.easygiantsfoundry; import com.google.inject.Provides; + +import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.VARBIT_GAME_STAGE; import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.VARBIT_HEAT; import com.toofifty.easygiantsfoundry.enums.Stage; @@ -27,6 +29,7 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.ScriptPostFired; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.widgets.Widget; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; @@ -36,6 +39,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; +import java.util.Objects; import java.util.Set; @Slf4j @@ -273,8 +277,12 @@ public class EasyGiantsFoundryPlugin extends Plugin { if (event.getMenuOption().equals("Pour")) { + if (client.getVarbitValue(VARBIT_GAME_STAGE) == 1) + { + state.setLastKnownCrucibleScore((int) state.getCrucibleScore()); + } // add persistent game message of the alloy value so user can reference later. - client.addChatMessage(ChatMessageType.GAMEMESSAGE, "", "The quality of the alloy poured is " + (int) state.getCrucibleQuality(), null); + client.addChatMessage(ChatMessageType.GAMEMESSAGE, "", "The score of the preform is " + ((int) state.getCrucibleScore() + state.getMouldScore()), null); } } @@ -315,6 +323,23 @@ public class EasyGiantsFoundryPlugin extends Plugin || event.getScriptId() == MouldHelper.RESET_MOULD_SCRIPT) { mouldHelper.selectBest(event.getScriptId()); + updateMouldScore(); + } + } + + private void updateMouldScore() { + + state.setMouldScore(mouldHelper.getTotalScore()); + + // show mould score on Mould UI Title + Widget mouldParent = client.getWidget(47054850); + Integer mouldScore = state.getMouldScore(); + if (mouldParent != null && mouldScore != null) + { + Widget title = Objects.requireNonNull(mouldParent.getChild(1)); + + // not sure why, the ":" character turns into ": ," when rendered; obmitting it. + title.setText("Giants' Foundry Mould Setup (Score " + mouldScore + ")"); } } diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java index 1fd8df5..2d5c071 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java @@ -9,10 +9,8 @@ import static com.toofifty.easygiantsfoundry.enums.Stage.GRINDSTONE; import static com.toofifty.easygiantsfoundry.enums.Stage.POLISHING_WHEEL; import static com.toofifty.easygiantsfoundry.enums.Stage.TRIP_HAMMER; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -import lombok.Value; import net.runelite.api.Client; import net.runelite.api.widgets.Widget; @@ -40,6 +38,14 @@ public class EasyGiantsFoundryState @Setter private int smithsOutfitPieces; + @Setter + @Getter + private Integer mouldScore; + + @Setter + @Getter + private Integer lastKnownCrucibleScore; + private final List stages = new ArrayList<>(); private double heatRangeRatio = 0; @@ -223,7 +229,7 @@ public class EasyGiantsFoundryState return bronze + iron + steel + mithril + adamant + rune; } - public double getCrucibleQuality() + public double getCrucibleScore() { // https://oldschool.runescape.wiki/w/Giants%27_Foundry#Metal_score diff --git a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java index db02f27..8064292 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java @@ -119,7 +119,11 @@ public class FoundryOverlay3D extends Overlay if (config.highlightCrucible()) { drawCrucibleIfMouldSet(graphics); + drawMouldScoreIfMouldSet(graphics); } + + drawPreformScoreIfPoured(graphics); + return null; } @@ -269,7 +273,7 @@ public class FoundryOverlay3D extends Overlay { return; } - String text = String.format("%d/%d metal score: %d", state.getCrucibleCount(), CRUCIBLE_CAPACITY, (int)state.getCrucibleQuality()); + String text = String.format("%d/%d score: %d", state.getCrucibleCount(), CRUCIBLE_CAPACITY, (int)state.getCrucibleScore()); LocalPoint crucibleLoc = crucible.getLocalLocation(); crucibleLoc = new LocalPoint(crucibleLoc.getX() - 100, crucibleLoc.getY()); @@ -287,6 +291,48 @@ public class FoundryOverlay3D extends Overlay OverlayUtil.renderTextLocation(graphics, pos, text, color); } + private void drawMouldScoreIfMouldSet(Graphics2D graphics) { + if (client.getVarbitValue(SWORD_TYPE_1_VARBIT) == 0) + { + return; + } + if (client.getVarbitValue(VARBIT_GAME_STAGE) != 1) + { + return; + } + + if (state.getMouldScore() == null) + { + return; + } + + String text = String.format("score: %d", state.getMouldScore()); + LocalPoint mouldLoc = mouldJig.getLocalLocation(); + Point pos = Perspective.getCanvasTextLocation(client, graphics, mouldLoc, text, 115); + Color color = config.generalHighlight(); + + OverlayUtil.renderTextLocation(graphics, pos, text, color); + } + private void drawPreformScoreIfPoured(Graphics2D graphics) { + if (client.getVarbitValue(VARBIT_GAME_STAGE) != 2) + { + return; + } + + if (state.getMouldScore() == null || state.getLastKnownCrucibleScore() == null) + { + return; + } + + int preformScore = state.getLastKnownCrucibleScore() + state.getMouldScore(); + String text = String.format("score: %d", preformScore); + LocalPoint mouldLoc = mouldJig.getLocalLocation(); + Point pos = Perspective.getCanvasTextLocation(client, graphics, mouldLoc, text, 115); + + Color color = config.generalHighlight(); + + OverlayUtil.renderTextLocation(graphics, pos, text, color); + } private void drawCrucibleIfMouldSet(Graphics2D graphics) { diff --git a/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java b/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java index a6b8b9e..5b14081 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java @@ -23,6 +23,9 @@ public class MouldHelper static final int SWORD_TYPE_2_VARBIT = 13908; // 3=Flat private static final int DISABLED_TEXT_COLOR = 0x9f9f9f; + private static final int SCORE_TYPE1_SCORE_WIDGET = 47054876; + private static final int SCORE_TYPE2_SCORE_WIDGET = 47054878; + @Inject private Client client; @@ -32,6 +35,47 @@ public class MouldHelper @Inject private EasyGiantsFoundryConfig config; + public Integer getTotalScore() + { + Widget type1Widget = client.getWidget(SCORE_TYPE1_SCORE_WIDGET); + Widget type2Widget = client.getWidget(SCORE_TYPE2_SCORE_WIDGET); + if (type1Widget == null || type2Widget == null) + { + return null; + } + + String type1Str = type1Widget.getText(); + String type2Str = type2Widget.getText(); + + // (+6) 6 + // ^ space seperated + // or + // 6 + if (type1Str.contains(" ")) + { + type1Str = type1Str.substring(type1Str.lastIndexOf(' ') + 1); + } + + if (type2Str.contains(" ")) + { + type2Str = type2Str.substring(type2Str.lastIndexOf(' ') + 1); + } + + + int type1Score; + int type2Score; + + try + { + type1Score = Integer.parseInt(type1Str); + type2Score = Integer.parseInt(type2Str); + } catch (NumberFormatException e) + { + return null; + } + + return type1Score + type2Score; + } public void selectBest(int scriptId) { Widget parent = client.getWidget(MOULD_LIST_PARENT);