parts: fix GetPartsUpperLeftPos{X,Y}

Hitbox is stored in local coordinates. These functions return global
coordinates.
This commit is contained in:
Nunuhara Cabbage
2024-07-26 20:28:55 -07:00
parent 103976b2b0
commit d7c550ea62
2 changed files with 13 additions and 7 deletions
+3 -5
View File
@@ -178,13 +178,11 @@ bool PE_IsCursorIn(int parts_no, int mouse_x, int mouse_y, int state)
if (!parts)
return false;
// TODO: this could be cached
Rectangle hitbox = parts->states[state].common.hitbox;
for (struct parts *parent = parts->parent; parent; parent = parent->parent) {
hitbox.x += parent->local.pos.x;
hitbox.y += parent->local.pos.y;
if (parts->parent) {
hitbox.x += parts->parent->global.pos.x;
hitbox.y += parts->parent->global.pos.y;
}
Point mouse_pos = { mouse_x, mouse_y };
return SDL_PointInRect(&mouse_pos, &hitbox);
}
+10 -2
View File
@@ -1441,14 +1441,22 @@ int PE_GetPartsUpperLeftPosX(int parts_no, int state)
{
if (!parts_state_valid(--state))
return 0;
return parts_get(parts_no)->states[state].common.hitbox.x;
struct parts *parts = parts_get(parts_no);
int x = parts->states[state].common.hitbox.x;
if (parts->parent)
x += parts->parent->global.pos.x;
return x;
}
int PE_GetPartsUpperLeftPosY(int parts_no, int state)
{
if (!parts_state_valid(--state))
return 0;
return parts_get(parts_no)->states[state].common.hitbox.y;
struct parts *parts = parts_get(parts_no);
int y = parts->states[state].common.hitbox.y;
if (parts->parent)
y += parts->parent->global.pos.y;
return y;
}
int PE_GetPartsZ(int parts_no)