SCI32: kIsOnMe apply scaling + use mulru() thx snover

This commit is contained in:
Martin Kiewitz 2016-02-20 16:14:34 +01:00
parent 9cb7caeb24
commit dda637e7ac
2 changed files with 12 additions and 14 deletions

View file

@ -1908,27 +1908,23 @@ uint16 GfxFrameout::isOnMe(Plane *screenItemPlane, ScreenItem *screenItem, int16
//warning("Check Pixels"); //warning("Check Pixels");
CelObj &screenItemCelObject = screenItem->getCelObj(); CelObj &screenItemCelObject = screenItem->getCelObj();
int32 celAdjustedX = adjustedX; Common::Point celAdjustedPoint(adjustedX, adjustedY);
int32 celAdjustedY = adjustedY;
bool celMirrored = screenItem->_mirrorX ^ screenItemCelObject._mirrorX; bool celMirrored = screenItem->_mirrorX ^ screenItemCelObject._mirrorX;
celAdjustedX -= screenItem->_scaledPosition.x; celAdjustedPoint.x -= screenItem->_scaledPosition.x;
celAdjustedY -= screenItem->_scaledPosition.y; celAdjustedPoint.y -= screenItem->_scaledPosition.y;
celAdjustedX = celAdjustedX * screenItemCelObject._scaledWidth / getCurrentBuffer().screenWidth; Ratio celAdjustXRatio(screenItemCelObject._scaledWidth, getCurrentBuffer().screenWidth);
celAdjustedY = celAdjustedY * screenItemCelObject._scaledHeight / getCurrentBuffer().screenHeight; Ratio celAdjustYRatio(screenItemCelObject._scaledHeight, getCurrentBuffer().screenHeight);
mulru(celAdjustedPoint, celAdjustXRatio, celAdjustYRatio);
// if adjustedX/Y larger than width/height divide again??
// + if >0 afterwards increase by 1
#if 0
if ((screenItem->_scale.signal) && (screenItem->_scale.x) && (screenItem->_scale.y)) { if ((screenItem->_scale.signal) && (screenItem->_scale.x) && (screenItem->_scale.y)) {
celAdjustedX = celAdjustedX * 128 / screenItem->_scale.x; // Apply scaling
celAdjustedY = celAdjustedY * 128 / screenItem->_scale.y; celAdjustedPoint.x = celAdjustedPoint.x * 128 / screenItem->_scale.x;
celAdjustedPoint.y = celAdjustedPoint.y * 128 / screenItem->_scale.y;
} }
#endif
byte coordinateColor = screenItemCelObject.readPixel(celAdjustedX, celAdjustedY, celMirrored); byte coordinateColor = screenItemCelObject.readPixel(celAdjustedPoint.x, celAdjustedPoint.y, celMirrored);
byte transparentColor = screenItemCelObject._transparentColor; byte transparentColor = screenItemCelObject._transparentColor;
if (coordinateColor == transparentColor) { if (coordinateColor == transparentColor) {

View file

@ -69,6 +69,7 @@ private:
*/ */
reg_t _plane; reg_t _plane;
public:
/** /**
* Scaling data used to calculate the final screen * Scaling data used to calculate the final screen
* dimensions of the screen item as well as the scaling * dimensions of the screen item as well as the scaling
@ -76,6 +77,7 @@ private:
*/ */
ScaleInfo _scale; ScaleInfo _scale;
private:
/** /**
* The position & dimensions of the screen item in * The position & dimensions of the screen item in
* screen coordinates. This rect includes the offset * screen coordinates. This rect includes the offset