More robust "is hovered" logic

This commit is contained in:
DBotThePony 2025-02-13 20:56:53 +07:00
parent dd3a08f47d
commit 3bdff50f4d
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 13 additions and 20 deletions

View File

@ -657,16 +657,9 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
this.renderBackground(graphics, mouseX, mouseY, partialTick)
super.hoveredSlot = null
var hovered = false
for (panel in panels) {
if (hovered) {
panel.unsetHovered()
} else if (panel.tickHovered0(mouseXf, mouseYf)) {
hovered = true
}
}
panels.forEach { hovered = it.tickHovered0(mouseXf, mouseYf, hovered) }
panels.forEach { it.tickHovered1() }
panels.forEach { it.tickHovered2() }

View File

@ -1006,9 +1006,16 @@ open class EditablePanel<out S : Screen>(
/**
* Determining whenever panel is hovered or not
*/
fun tickHovered0(mouseX: Float, mouseY: Float): Boolean {
fun tickHovered0(mouseX: Float, mouseY: Float, somethingElseHovered: Boolean): Boolean {
if (isRemoved)
return false
return somethingElseHovered
else if (somethingElseHovered) {
if (parent == null)
updateAbsolutePosition()
unsetHovered()
return true
}
val potentiallyHovered: Boolean
@ -1025,14 +1032,7 @@ open class EditablePanel<out S : Screen>(
if (potentiallyHovered) {
var hit = false
for (child in visibleChildrenInternal) {
if (hit) {
child.unsetHovered()
} else if (child.tickHovered0(mouseX, mouseY)) {
hit = true
}
}
visibleChildrenInternal.forEach { hit = it.tickHovered0(mouseX, mouseY, hit) }
pendingIsHovered =
!hit &&

View File

@ -22,7 +22,7 @@ class Panel2Widget<out S: Screen, out P : EditablePanel<S>>(
val wrap = MGUIGraphics(graphics)
panel.tickHovered0(xFloat, yFloat)
panel.tickHovered0(xFloat, yFloat, false)
panel.tickHovered1()
panel.tickHovered2()
panel.render(wrap, xFloat, yFloat, partialTick)