MYST3: Scale the mouse cursor size with the resolution

Fixes #1480.
This commit is contained in:
Bastien Bouclet 2018-09-09 21:06:56 +02:00
parent 0f3cf3e511
commit 2284381c99
2 changed files with 29 additions and 23 deletions

View File

@ -37,24 +37,24 @@ struct CursorData {
uint32 nodeID;
uint16 hotspotX;
uint16 hotspotY;
double transparency;
double transparencyXbox;
float transparency;
float transparencyXbox;
};
static const CursorData availableCursors[] = {
{ 1000, 8, 8, 0.25, 0.00 }, // Default cursor
{ 1001, 8, 8, 0.50, 0.50 }, // On top of inventory item
{ 1002, 8, 8, 0.50, 0.50 }, // Drag cursor
{ 1003, 1, 5, 0.50, 0.50 },
{ 1004, 14, 5, 0.50, 0.50 },
{ 1005, 16, 14, 0.50, 0.50 },
{ 1006, 16, 14, 0.50, 0.50 },
{ 1007, 8, 8, 0.55, 0.55 },
{ 1000, 8, 8, 0.25, 0.00 }, // Default cursor
{ 1001, 8, 8, 0.50, 0.50 },
{ 1011, 16, 16, 0.50, 0.50 },
{ 1000, 6, 1, 0.50, 0.50 },
{ 1000, 8, 8, 0.00, 0.25 } // Invisible cursor
{ 1000, 8, 8, 0.25f, 0.00f }, // Default cursor
{ 1001, 8, 8, 0.50f, 0.50f }, // On top of inventory item
{ 1002, 8, 8, 0.50f, 0.50f }, // Drag cursor
{ 1003, 1, 5, 0.50f, 0.50f },
{ 1004, 14, 5, 0.50f, 0.50f },
{ 1005, 16, 14, 0.50f, 0.50f },
{ 1006, 16, 14, 0.50f, 0.50f },
{ 1007, 8, 8, 0.55f, 0.55f },
{ 1000, 8, 8, 0.25f, 0.00f }, // Default cursor
{ 1001, 8, 8, 0.50f, 0.50f },
{ 1011, 16, 16, 0.50f, 0.50f },
{ 1000, 6, 1, 0.50f, 0.50f },
{ 1000, 8, 8, 0.00f, 0.25f } // Invisible cursor
};
Cursor::Cursor(Myst3Engine *vm) :
@ -63,7 +63,7 @@ Cursor::Cursor(Myst3Engine *vm) :
_hideLevel(0),
_lockedAtCenter(false) {
// The cursor is drawn unscaled
// The cursor is manually scaled
_scaled = false;
_isConstrainedToWindow = false;
@ -143,7 +143,7 @@ void Cursor::changeCursor(uint32 index) {
_currentCursorID = index;
}
double Cursor::getTransparencyForId(uint32 cursorId) {
float Cursor::getTransparencyForId(uint32 cursorId) {
assert(cursorId < ARRAYSIZE(availableCursors));
if (_vm->getPlatform() == Common::kPlatformXbox) {
return availableCursors[cursorId].transparencyXbox;
@ -208,18 +208,24 @@ void Cursor::draw() {
}
// Rect where to draw the cursor
Common::Rect screenRect = Common::Rect(texture->width, texture->height);
screenRect.translate(_position.x - cursor.hotspotX, _position.y - cursor.hotspotY);
Common::Rect viewport = _vm->_gfx->viewport();
float scale = MIN(
viewport.width() / (float) Renderer::kOriginalWidth,
viewport.height() / (float) Renderer::kOriginalHeight
);
// Rect where to draw the cursor
Common::Rect screenRect = Common::Rect(texture->width * scale, texture->height * scale);
screenRect.translate(_position.x - cursor.hotspotX * scale, _position.y - cursor.hotspotY * scale);
// Texture rect
Common::Rect textureRect = Common::Rect(texture->width, texture->height);
float transparency = 1.0;
float transparency = 1.0f;
int32 varTransparency = _vm->_state->getCursorTransparency();
if (_lockedAtCenter || varTransparency == 0) {
if (varTransparency >= 0)
transparency = varTransparency / 100.0;
transparency = varTransparency / 100.0f;
else
transparency = getTransparencyForId(_currentCursorID);
}

View File

@ -73,7 +73,7 @@ private:
bool _lockedAtCenter;
void loadAvailableCursors();
double getTransparencyForId(uint32 cursorId);
float getTransparencyForId(uint32 cursorId);
};
} // End of namespace Myst3