From dd73d961c08b35b874f6738aa1debb096f933947 Mon Sep 17 00:00:00 2001 From: Louis Hong Date: Sat, 9 Nov 2024 01:28:17 -0800 Subject: [PATCH] stored preform stage added & heat/cool prediction state machine filters only gameobject actions previously, when preform is stored in storage, plugin assumes it's time to talk to kovac for new commision. previously, any menu action will interupt and stop the heat/cooling statemachine state. --- .../EasyGiantsFoundryClientIDs.java | 2 + .../EasyGiantsFoundryConfig.java | 12 +++ .../EasyGiantsFoundryPlugin.java | 79 ++++++++++++------- .../easygiantsfoundry/FoundryOverlay3D.java | 27 ++++++- 4 files changed, 87 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryClientIDs.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryClientIDs.java index 9420e33..537ae7e 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryClientIDs.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryClientIDs.java @@ -23,6 +23,8 @@ public class EasyGiantsFoundryClientIDs // 3 - protected static final int VARBIT_GAME_STAGE = 13914; + protected static final int VARBIT_PREFORM_STORED = 13947; + protected static final int WIDGET_HEAT_PARENT = 49414153; protected static final int WIDGET_LOW_HEAT_PARENT = 49414163; protected static final int WIDGET_MED_HEAT_PARENT = 49414164; diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java index 7122621..d02654e 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java @@ -247,6 +247,18 @@ public interface EasyGiantsFoundryConfig extends Config return true; } + @ConfigItem( + keyName = "storageHighlight", + name = "Highlight Preform Storage", + description = "Highlight Storage when it contains a preform.", + position = 10, + section = highlightList + ) + default boolean highlightStorage() + { + return true; + } + @ConfigSection( name = "Info Panel", description = "Settings for the Info Panel overlay", diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java index 2027807..427a075 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java @@ -17,6 +17,7 @@ import net.runelite.api.GameState; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; +import net.runelite.api.MenuAction; import net.runelite.api.Skill; import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectSpawned; @@ -58,6 +59,7 @@ public class EasyGiantsFoundryPlugin extends Plugin private static final int CRUCIBLE = 44776; private static final int MOULD_JIG = 44777; + private static final int STORAGE = 44778; private static final int KOVAC_NPC = 11472; @@ -156,10 +158,47 @@ public class EasyGiantsFoundryPlugin extends Plugin case CRUCIBLE: overlay3d.crucible = gameObject; break; + case STORAGE: + overlay3d.storage = gameObject; + break; } } + @Subscribe + public void onGameObjectDespawned(GameObjectDespawned event) + { + GameObject gameObject = event.getGameObject(); + switch (gameObject.getId()) + { + case POLISHING_WHEEL: + state.setEnabled(false); + overlay3d.polishingWheel = null; + break; + case GRINDSTONE: + overlay3d.grindstone = null; + break; + case LAVA_POOL: + overlay3d.lavaPool = null; + break; + case WATERFALL: + overlay3d.waterfall = null; + break; + case TRIP_HAMMER: + overlay3d.tripHammer = null; + break; + case MOULD_JIG: + overlay3d.mouldJig = null; + break; + case CRUCIBLE: + overlay3d.crucible = null; + break; + case STORAGE: + overlay3d.storage = null; + break; + } + } + @Subscribe public void onGameStateChanged(GameStateChanged event) { @@ -202,36 +241,6 @@ public class EasyGiantsFoundryPlugin extends Plugin } } - @Subscribe - public void onGameObjectDespawned(GameObjectDespawned event) - { - GameObject gameObject = event.getGameObject(); - switch (gameObject.getId()) - { - case POLISHING_WHEEL: - state.setEnabled(false); - overlay3d.polishingWheel = null; - break; - case GRINDSTONE: - overlay3d.grindstone = null; - break; - case LAVA_POOL: - overlay3d.lavaPool = null; - break; - case WATERFALL: - overlay3d.waterfall = null; - break; - case TRIP_HAMMER: - overlay3d.tripHammer = null; - break; - case MOULD_JIG: - overlay3d.mouldJig = null; - break; - case CRUCIBLE: - overlay3d.crucible = null; - break; - } - } @Subscribe public void onNpcSpawned(NpcSpawned event) @@ -271,6 +280,16 @@ public class EasyGiantsFoundryPlugin extends Plugin @Subscribe public void onMenuOptionClicked(MenuOptionClicked event) { + + if (!(event.getMenuAction() == MenuAction.GAME_OBJECT_FIRST_OPTION + || event.getMenuAction() == MenuAction.GAME_OBJECT_SECOND_OPTION + || event.getMenuAction() == MenuAction.GAME_OBJECT_THIRD_OPTION + || event.getMenuAction() == MenuAction.GAME_OBJECT_FOURTH_OPTION + || event.getMenuAction() == MenuAction.GAME_OBJECT_FIFTH_OPTION)) + { + return; + } + if (!state.isEnabled()) return; if (event.getMenuTarget().contains("Crucible ")) diff --git a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java index afaea7e..263041a 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java @@ -1,7 +1,6 @@ package com.toofifty.easygiantsfoundry; -import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.VARBIT_GAME_STAGE; -import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.WIDGET_PROGRESS_PARENT; +import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.*; import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryHelper.getHeatColor; import static com.toofifty.easygiantsfoundry.MouldHelper.SWORD_TYPE_1_VARBIT; import static com.toofifty.easygiantsfoundry.MouldHelper.SWORD_TYPE_2_VARBIT; @@ -42,6 +41,7 @@ public class FoundryOverlay3D extends Overlay GameObject waterfall; GameObject mouldJig; GameObject crucible; + GameObject storage; NPC kovac; private final Client client; @@ -111,6 +111,15 @@ public class FoundryOverlay3D extends Overlay drawKovacIfHandIn(graphics); } + if (client.getVarbitValue(VARBIT_PREFORM_STORED) == 1) + { + if (config.highlightStorage()) + { + drawStorage(graphics); + } + return null; + } + if (state.getCurrentStage() == null) { if (config.highlightMould()) @@ -127,7 +136,6 @@ public class FoundryOverlay3D extends Overlay drawPreformScoreIfPoured(graphics); } - return null; } @@ -486,6 +494,19 @@ public class FoundryOverlay3D extends Overlay } } + private void drawStorage(Graphics2D graphics) + { + Shape shape = storage.getConvexHull(); + if (shape != null) + { + Color color = config.generalHighlight(); + graphics.setColor(color); + graphics.draw(shape); + graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), 20)); + graphics.fill(shape); + } + } + private void drawKovacIfHandIn(Graphics2D graphics) { Widget handInWidget = client.getWidget(HAND_IN_WIDGET);