This stores the underlying message node, which may be updated much later with a
new message value if a command is used, and replays that. Previously
this was storing and replaying the raw RL formatted message, which is
why colors would be stripped off of RL-formatted messages on replay.
This also no longer triggers chat message events from history replay,
which fixes commands incorrectly refiring from replay (and thus the nbsp
hack), and fixes the chat notifier sending notifications for replayed
messages.
With multiple clients with different configs saving at once, the same temp file was being used, which can cause it to not save or to move() a temp file from a different client
MacOS does not support fallback fonts, and any character not in our RS
fonts do not render correctly.
We only render unicode characters a handful of places, mostly for the
check mark/cross in overlays, and on the icon text field suggestion
button. So this sets the font of those places to the default system font
which can render them correctly.
There is only one legitimate use of this, which is in the hiscore
plugin, but it is simple to replace it with a normal menu option clicked
event. Additionally the world hopper was incorrectly using this event
for the Hop option, so it has been changed to use the menu option
clicked event.
gradle does not look at classifiers when doing dependency conflict
resolution, causing it to not correctly handle having multiple
dependencies of differing versions and classifiers. It picks the highest
version of any of the dependencies with the same groupId and artifactId
and uses that for every other dependency regardless of classifier.
This renames the osx natives artifacts to have a unique artifact name to
workaround this issue
The size was being computed from the enum names during the getPreferredSize() call due to not having the renderer set yet. Additionally the old prototype display value was not being used during this as it was not set yet, either.
The position returned by getCameraX/Y/Z are not yet updated when this is
called, causing it to be from the previous frame's camera position.
This was introduced in 0fc1a94088 when the
uniform code was copied from draw.
This allows configuring spec thresholds which a notification will be sent for
when reached. Additionally it colors the infobox text red or green based on if
the threshold has been reached.
Co-authored-by: Dylan <dylanhe@gmail.com>
Co-authored-by: jgozon <47003557+jgozon@users.noreply.github.com>
These are commonly attacked during boss fights or whilst speccing down bosses and shouldn't reset the counter
Co-authored-by: vitorebom <vitorebom@users.noreply.github.com>
This clamps layouted overlays to their parent's bounds, and also adjusts
the snap corner for the shifted position that is a result of the clamp,
so that the following overlays correctly get layouted.
This moves the compute shaders to run immediately after scene draw,
instead of in the draw() callback, which happens much later. All models
in the scene have been queued by the time, but since it is so early in
the ui drawing, it gives a few more ms for the compute to run before the
result needs to be used to draw the next frame.
This adjusts the draw callbacks api to take in the color of the full
screen overlay the client would have rendered. This is primarily used in
godwars, underwater, darkmeyer, etc. Having them rasterized on the cpu
is slow, especially with gpu on since we additionally have to compute
the alpha per-pixel.
While nothing passed to comp_unordered uses orientation, the uniform
block is not bound in this shader, and rotate() accesses sinCosTable. So
I'm not sure why this has ever worked.
Adjust the mouse highlight overlay to run at the same layers as the
tooltip overlay. It always runs first due to having a lower position.
I think previously tooltips from ui ops were 1 frame behind due to this
being UNDER_WIDGETS.
Additionally change the tooltip overlay to draw after the fullscreen tli
instead of the world map interface. Having it render after the world map
caused tooltips to render after the floating world map too, which is too
early. The fullscreen tli is the root of both the fullscreen world map
and of the welcome screen.
After login there are two sets of offer updates, I suspect the first is
from the server and the second is from the ge server - this also flags
ge server trade updates as on login. To do this we assume it always
happens in the first few ticks after the login burst.
This fixes an issue where if the action at the configured shift click action
index was null, which can happen due to item variations, the option.equals()
check would npe, and prevent configuring shift click on the item.
This allows overlays to request draw after any interface or layer. This
allows removal of the ABOVE_MAP layer which can now just be replaced
with requesting draw after the map interface. This also fixes item
overlays from drawing over top of the map by now drawing the item
overlay immediately after the interface and/or layer the item is on is
drawn.
For backwards compatability, ABOVE_WIDGETS is kept as a layer, but
internally just requests draw after the 3 TLIs.
Due to overlays defaulting to the UNDER_WIDGETS layer, a new layer
MANUAL has been added, which is intended for use when requesting draw
after specific interfaces or layers, so that the overlay is otherwise
not drawn a second time due to being UNDER_WIDGETS.
The rendered x/y position of the viewport layer is the same as the viewport offsets. This also no longer assumes the x/y offets are the same, even though in practice they always are.
The returned widget isn't actually the viewport widget, but is a layer within the viewport, and only needs to be used within the overlay renderer to position the snapcorners
This removes the hack of double setting the widget position in
WidgetOverlay, which was required to override the overlay renderers
clamping code in both overlay drag and in overlay rendering.
Requiring the mouse to be moved first causes dead clicks when the mouse is
pressed immediately after entering overlay management mode. Also since
resetOverlayManagementMode() clears the managed overlay, after dragging
an overlay it again requires the mouse to be moved to pick up a click on it
if dragging again or trying to reset the overlay.
If the client is closed prior to the socket being created, or if socket creation fails, this will repeatedly throw out of close() in connect() and is never able to reestablish a connection
The reward text color is meant to show what is the optimal reward percent
for money, assuming that blood runes are best, and death runes are
second best. The percentage thresholds however were incorrect.
This logic was from prior to cox having a pb message, and so it had to compare
the known pb with the current raid duration. Now that all raids have a pb
message, it is no longer necessary to do this. This fixes pb times syncing up
in the main game correctly that were overwritten by leagues.
At some point this changed to no longer animate once the sire changed to
the stunned type. This changes the timer to just use the npc changed
event, which should work more reliably.
This moves all of the timer tracking logic outside of the check for if
the timer is on, and now also allows toggling the timer on and off when
in the caves.