This lets plain latin-character filters to match messages with accents
and diacritics which are not easily typed on all keyboard layouts.
Co-authored-by: Jordan Atwood <jordan.atwood423@gmail.com>
This hasn't worked in awhile since it was assining the scroll value to the
wrong variable. Now we are computing the scroll in onScriptPreFixed for
[proc,bankmain_finishbuilding], so it is no longer necessary here.
With tag tab tab or "Remove tab separators", the scrollbar height needs to be
adjusted to account for either many tag tabs (which requires scrolling to see)
or the hiding of the tab separators. This is because we artifically filter the
bank results without keeping the bank in searching mode, causing the vanilla
code which usually computes the scroll height to be incorrect.
The existing code does this by manually invoking [proc,update_scrollbar] later
with the recomputed scroll height. Now that invokeLater runs next tick and not
next frame, this leaves several frames with the scrollbar the incorrect size.
The desired scroll height is passed to [proc,bankmain_finishbuilding] in
argument int12, so instead we recompute the scroll height and overwrite the
script argument prior to execution.
From the opengl wiki:
Recent GL drivers implement a new WGL/GLX extension called EXT_swap_control_tear.
This extension brings "adaptive vsync" as featured in modern gaming consoles to the PC.
Adaptive vsync enables v-blank synchronisation when the frame rate is higher than the
sync rate, but disables synchronisation when the frame rate drops below the sync rate.
Disabling the synchronisation on low frame rates prevents the common problem where the
frame rate syncs to a integer fraction of the screen's refresh rate in a complex scene.
If the EXT_swap_control_tear extension is not supported, JOGL uses the absolute value
as the swap interval, 1, the same as before.
Shortly after logging in there several frames without a tli, and so no scene is
rendered on them. Since we glClear the entire buffer each frame and re-render
the most recent scene draw to emulate the vanilla effect of not painting over
the viewport, the viewport offset x/y values at the time we draw the frame may
be -1 due to that frame not having the scene rendered. Store the viewport
offsets at the time of the most recent scene draw and use them for each
subsequent frame.
With invokeLater() now running next tick instead of next frame, with uncapped fps there can be several frames with the bank pin visible in the chatbox. This blocks the keyboard input on this tick, preventing having to clear the chatbox later.
Also move the RL Instructions from the script assembler to cache too, so it can be reused by the updater. The api Opcodes class has no use in the public api and so is removed.
Doing the xp calculation with floats and then converting it to double is
less precise, and causes minor errors that accumulate with very large xp
ranges
XP cannot be more precise than a 10th of an xp. This was compute more precise xp values and when applied over many actions caused the computed actions to be incorrect
When the wiki entity lookup option is off the parent layer isn't
positioned at all, causing the resulting wiki icon we create to be
incorrectly positioned.
This method checks if the model is on screen by projecting points at the model
extremes to screen and seeing if they are in the viewport bounds.
When doing this, it offsets the model height for the top of the viewport check,
but does not offset the bottom of the model for the bottom viewport check. This
offsets the bottom height to the model y position before doing this check,
which improves the test on models which are beneath the tile they are placed on.
This is most noticible in the Karamja dungeon and Hydra dungeon which has
objects for the lava instead of tiles, and they are placed at y=0 with some or
all of the model being below that.
Without this, the minimum size will be the same size as was prior to
maximizing the frame. If the side bar or panel is opened or closed when
maximized this can cause the minimum size to be incorrect after a
restore.
Co-authored-by: Mark Koester <mark.koester1@gmail.com>
Co-authored-by: Jeremy Plsek <jeremyplsek@gmail.com>
When the varrock armour effect triggers it will smelt two bars at once,
using two charges, unless there is only one ore remaining where it will
use only one charge.
Co-authored-by: Jason Barr <58792686+JBarr2710@users.noreply.github.com>
The ground marker minimap overlay gets a local point for the tile to mark from fromWorld()
and passes it to localToMinimap() - but because the adjustment of -1, when the player position
is subtracted from it to compute the minimap location it causes the computed position to be off
by a full tile.
Additionally, drawRect() width and height is inclusive so the width/height must be subtracted by 1
GPU uses an alternative projection to avoid vertex snapping. Usually
this doesn't matter much, and in the worst case causes the discrepancy
to be only a few pixels, but with the model outline feature it causes
the outlines to be noticibly off when GPU is enabled.
This adds a second model-to-canvas method using the alternative
projection and uses it when GPU is enabled.
If the xptracker is shown, but both counter and progress bar set to off, the xp tracker layer is not actually hidden but only has hidden children. This causes the overlay renderer to layout things around the invisible xptracker. Avoid this by checking the vars for the xptracker to see if it is hidden or not.
The darker() is originally from the npc indicators minimap overlay, but other plugins now using this such as impling plugin do not expect this.
If we require the minimap colors to be different later we should add a separate property specifically for it.
This allows the other plugins which depend on the npc overaly to work
when npc highlight plugin is off, while still letting them use the
consistent highlight style of the central overlay.
Lightweight components do not render correctly over AWT canvases on
MacOS. The popup factory API to override this is not available on 8, so
add an 11-specific popup factory to override it by using a multi-release
jar.
With the new steam client updates, the client tries to aggressively
move around several of the widget overlay components, including xp
tracker, and several hp bars. This tends to fight with the layouting we
already do with the widgets.
This changes the widgets to only be layouted if the overlay has a
preferred location or position set. Otherwise, it will offset the snap
corner bounds by where the client has positione the widget.
It is still possible to get the client ui to fight the widget overlay by
moving the overlays around manually, but it should no longer happen in
the default positioning of the widgets.
After changing the slayer plugin to use npc indicators for the outline
style, some users request being able to set the color of slayer
highlights to be unique in order to identify marked npcs such as
superiors while slaying. This readds the previous target color config
and adds new highlight style options to the slayer plugin.
The ChatPlayers do not implement equals or hashCode, making them
unsuitable as a hashmap key. Instead just use a linked list and compare
the members using the comparable interface.
Closing and opening the sidebar when the side panel is collapsed
currently expands the side panel to the most recently opened panel,
even if it was collapsed at the time the sidebar was closed, and also
incorrectly doesn't set the nav button as selected.
This changes the behavior of expanding the sidebar to not open the side
panel if it was not opened at the time the sidebar was closed.