Make VarbitChanged only fire once, after everything has settled

This commit is contained in:
Max Weber
2018-05-09 21:20:36 -06:00
parent 564f54a42b
commit c9d0abc1c3
3 changed files with 22 additions and 3 deletions

View File

@@ -191,6 +191,8 @@ public interface Client extends GameEngine
@VisibleForDevtools @VisibleForDevtools
void setVarbitValue(int varbit, int value); void setVarbitValue(int varbit, int value);
boolean shouldPostVarbitEvent();
HashTable getWidgetFlags(); HashTable getWidgetFlags();
HashTable getComponentTable(); HashTable getComponentTable();

View File

@@ -64,6 +64,7 @@ import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.PostItemComposition; import net.runelite.api.events.PostItemComposition;
import net.runelite.api.events.ProjectileMoved; import net.runelite.api.events.ProjectileMoved;
import net.runelite.api.events.SetMessage; import net.runelite.api.events.SetMessage;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
@@ -102,6 +103,7 @@ public class Hooks
private static final GameTick tick = new GameTick(); private static final GameTick tick = new GameTick();
private static final DrawManager renderHooks = injector.getInstance(DrawManager.class); private static final DrawManager renderHooks = injector.getInstance(DrawManager.class);
private static final Notifier notifier = injector.getInstance(Notifier.class); private static final Notifier notifier = injector.getInstance(Notifier.class);
private static final VarbitChanged varbitChanged = new VarbitChanged();
private static Dimension lastStretchedDimensions; private static Dimension lastStretchedDimensions;
private static BufferedImage stretchedImage; private static BufferedImage stretchedImage;
@@ -116,6 +118,11 @@ public class Hooks
{ {
shouldProcessGameTick = false; shouldProcessGameTick = false;
if (client.shouldPostVarbitEvent())
{
eventBus.post(varbitChanged);
}
_deferredEventBus.replay(); _deferredEventBus.replay();
eventBus.post(tick); eventBus.post(tick);

View File

@@ -74,7 +74,6 @@ import net.runelite.api.events.PlayerMenuOptionsChanged;
import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.PlayerSpawned;
import net.runelite.api.events.ResizeableChanged; import net.runelite.api.events.ResizeableChanged;
import net.runelite.api.events.UsernameChanged; import net.runelite.api.events.UsernameChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.FieldHook;
@@ -129,6 +128,9 @@ public abstract class RSClientMixin implements RSClient
@Inject @Inject
private static int inventoryDragDelay; private static int inventoryDragDelay;
@Inject
private static boolean hasVarbitChanged;
@Inject @Inject
@Override @Override
public boolean isInterpolatePlayerAnimations() public boolean isInterpolatePlayerAnimations()
@@ -815,8 +817,16 @@ public abstract class RSClientMixin implements RSClient
@Inject @Inject
public static void settingsChanged(int idx) public static void settingsChanged(int idx)
{ {
VarbitChanged varbitChanged = new VarbitChanged(); hasVarbitChanged = true;
eventBus.post(varbitChanged); }
@Inject
@Override
public boolean shouldPostVarbitEvent()
{
boolean ret = hasVarbitChanged;
hasVarbitChanged = false;
return ret;
} }
@FieldHook("isResized") @FieldHook("isResized")