void CPersonalShopTitleImp::CalculateBooleanPos(IN CHARACTER* pPlayer, IN const SIZE& size, OUT POINT& pos)
{
vec3_t posTemp;
OBJECT* pObject = &pPlayer->Object;
// Calculamos el ratio de altura para escalado
float heightRatio = (float)WindowHeight / 480.0f;
float verticalOffset3D;
if (WindowHeight <= 360) { // Resoluciones muy bajas
verticalOffset3D = 50.0f; // Menos altura
}
else if (WindowHeight <= 480) { // 480p estándar
verticalOffset3D = 60.0f; // Altura original
}
else if (WindowHeight <= 720) { // 720p
verticalOffset3D = 70.0f; // Un poco más alto
}
else if (WindowHeight <= 1080) { // 1080p
verticalOffset3D = 80.0f; // Más alto
}
else { // 4K o superior
verticalOffset3D = 90.0f; // Mucho más alto
}
Vector(pObject->Position[0], pObject->Position[1],
pObject->Position[2] + pObject->BoundingBoxMax[2] + verticalOffset3D, posTemp);
POINT ptFloating;
Projection(posTemp, (int*)&ptFloating.x, (int*)&ptFloating.y);
// Posición horizontal centrada
pos.x = (ptFloating.x * (int)WindowWidth / DisplayWin) - size.cx / 2;
int projectedY = ptFloating.y * (int)WindowHeight / 480;
int engineOffset = 12 * 3 * (int)WindowHeight / 480;
int additionalOffset;
if (WindowHeight <= 360) {
additionalOffset = 4; // Pequeño ajuste para pantallas muy pequeñas
}
else if (WindowHeight <= 480) {
additionalOffset = 5; // Ajuste original para 480p
}
else if (WindowHeight <= 720) {
additionalOffset = 15; // Ajuste para 720p
}
else if (WindowHeight <= 1024) {
additionalOffset = 10; // Ajuste para 10240p
}
else if (WindowHeight <= 1080) {
additionalOffset = 55; // Ajuste para 1080p
}
additionalOffset = (int)(additionalOffset * heightRatio);
// Posición final
pos.y = projectedY - engineOffset - additionalOffset;
}