mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-26 05:55:15 +00:00
DJUI: Made cursor movement more predictable
This commit is contained in:
parent
b0453da5e4
commit
3d0d87a4eb
1 changed files with 17 additions and 10 deletions
|
@ -57,22 +57,29 @@ static void djui_cursor_move_check(s8 xDir, s8 yDir, struct DjuiBase** pick, str
|
||||||
if (!base->enabled) { return; }
|
if (!base->enabled) { return; }
|
||||||
|
|
||||||
if (base->interactable != NULL) {
|
if (base->interactable != NULL) {
|
||||||
|
f32 x1, y1, x2, y2;
|
||||||
|
x1 = base->elem.x;
|
||||||
|
y1 = base->elem.y;
|
||||||
|
x2 = base->elem.x + base->elem.width;
|
||||||
|
y2 = base->elem.y + base->elem.height;
|
||||||
|
bool xWithin = (gCursorX >= x1 && gCursorX <= x2) || sCursorMouseControlled;
|
||||||
|
bool yWithin = (gCursorY >= y1 && gCursorY <= y2) || sCursorMouseControlled;
|
||||||
|
|
||||||
|
bool valid = false;
|
||||||
|
if (yDir > 0 && gCursorY < y1 && xWithin) { valid = true; }
|
||||||
|
if (yDir < 0 && gCursorY > y2 && xWithin) { valid = true; }
|
||||||
|
if (xDir > 0 && gCursorX < x1 && yWithin) { valid = true; }
|
||||||
|
if (xDir < 0 && gCursorX > x2 && yWithin) { valid = true; }
|
||||||
|
|
||||||
f32 xH, yH;
|
f32 xH, yH;
|
||||||
djui_cursor_base_hover_location(base, &xH, &yH);
|
djui_cursor_base_hover_location(base, &xH, &yH);
|
||||||
bool valid = true;
|
|
||||||
if (xDir > 0 && gCursorX >= xH) { valid = false; }
|
|
||||||
if (xDir < 0 && gCursorX <= xH) { valid = false; }
|
|
||||||
if (yDir > 0 && gCursorY >= yH) { valid = false; }
|
|
||||||
if (yDir < 0 && gCursorY <= yH) { valid = false; }
|
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (*pick == NULL) {
|
if (*pick == NULL) {
|
||||||
*pick = base;
|
*pick = base;
|
||||||
} else {
|
} else {
|
||||||
f32 pickDist = djui_cursor_base_distance(*pick, xDir ? 1.0f : 10.0f, yDir ? 1.0f : 10.0f);
|
f32 pickDist = djui_cursor_base_distance(*pick, xDir ? 1.0f : 2.0f, yDir ? 1.0f : 2.0f);
|
||||||
f32 baseDist = djui_cursor_base_distance(base, xDir ? 1.0f : 10.0f, yDir ? 1.0f : 10.0f);
|
f32 baseDist = djui_cursor_base_distance(base, xDir ? 1.0f : 2.0f, yDir ? 1.0f : 2.0f);
|
||||||
if (baseDist < pickDist) {
|
if (baseDist < pickDist) { *pick = base; }
|
||||||
*pick = base;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue