Skip to content

Commit

Permalink
SCI32: kIsOnMe apply scaling + use mulru() thx snover
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Kiewitz committed Feb 20, 2016
1 parent 9cb7cae commit dda637e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 14 deletions.
24 changes: 10 additions & 14 deletions engines/sci/graphics/frameout.cpp
Expand Up @@ -1908,27 +1908,23 @@ uint16 GfxFrameout::isOnMe(Plane *screenItemPlane, ScreenItem *screenItem, int16
//warning("Check Pixels");
CelObj &screenItemCelObject = screenItem->getCelObj();

int32 celAdjustedX = adjustedX;
int32 celAdjustedY = adjustedY;
Common::Point celAdjustedPoint(adjustedX, adjustedY);
bool celMirrored = screenItem->_mirrorX ^ screenItemCelObject._mirrorX;

celAdjustedX -= screenItem->_scaledPosition.x;
celAdjustedY -= screenItem->_scaledPosition.y;
celAdjustedPoint.x -= screenItem->_scaledPosition.x;
celAdjustedPoint.y -= screenItem->_scaledPosition.y;

celAdjustedX = celAdjustedX * screenItemCelObject._scaledWidth / getCurrentBuffer().screenWidth;
celAdjustedY = celAdjustedY * screenItemCelObject._scaledHeight / getCurrentBuffer().screenHeight;
Ratio celAdjustXRatio(screenItemCelObject._scaledWidth, getCurrentBuffer().screenWidth);
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)) {
celAdjustedX = celAdjustedX * 128 / screenItem->_scale.x;
celAdjustedY = celAdjustedY * 128 / screenItem->_scale.y;
// Apply scaling
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;

if (coordinateColor == transparentColor) {
Expand Down
2 changes: 2 additions & 0 deletions engines/sci/graphics/screen_item32.h
Expand Up @@ -69,13 +69,15 @@ class ScreenItem {
*/
reg_t _plane;

public:
/**
* Scaling data used to calculate the final screen
* dimensions of the screen item as well as the scaling
* ratios used when drawing the item to screen.
*/
ScaleInfo _scale;

private:
/**
* The position & dimensions of the screen item in
* screen coordinates. This rect includes the offset
Expand Down

0 comments on commit dda637e

Please sign in to comment.