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
void setVarbitValue(int varbit, int value);
boolean shouldPostVarbitEvent();
HashTable getWidgetFlags();
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.ProjectileMoved;
import net.runelite.api.events.SetMessage;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.widgets.Widget;
import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP;
import net.runelite.client.Notifier;
@@ -102,6 +103,7 @@ public class Hooks
private static final GameTick tick = new GameTick();
private static final DrawManager renderHooks = injector.getInstance(DrawManager.class);
private static final Notifier notifier = injector.getInstance(Notifier.class);
private static final VarbitChanged varbitChanged = new VarbitChanged();
private static Dimension lastStretchedDimensions;
private static BufferedImage stretchedImage;
@@ -116,6 +118,11 @@ public class Hooks
{
shouldProcessGameTick = false;
if (client.shouldPostVarbitEvent())
{
eventBus.post(varbitChanged);
}
_deferredEventBus.replay();
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.ResizeableChanged;
import net.runelite.api.events.UsernameChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.FieldHook;
@@ -129,6 +128,9 @@ public abstract class RSClientMixin implements RSClient
@Inject
private static int inventoryDragDelay;
@Inject
private static boolean hasVarbitChanged;
@Inject
@Override
public boolean isInterpolatePlayerAnimations()
@@ -815,8 +817,16 @@ public abstract class RSClientMixin implements RSClient
@Inject
public static void settingsChanged(int idx)
{
VarbitChanged varbitChanged = new VarbitChanged();
eventBus.post(varbitChanged);
hasVarbitChanged = true;
}
@Inject
@Override
public boolean shouldPostVarbitEvent()
{
boolean ret = hasVarbitChanged;
hasVarbitChanged = false;
return ret;
}
@FieldHook("isResized")