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.
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.