diff options
author | Matthew Stewart | 2018-05-17 19:35:31 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | 6117a8919432e7223f3e263f7d9c2f84840f76b9 (patch) | |
tree | 5a605ac102264ce9ea41bc11ba14299a10d0460f /engines/startrek/graphics.cpp | |
parent | 02485484c31bee3101ecd3ac7ccb86e2db7b029b (diff) | |
download | scummvm-rg350-6117a8919432e7223f3e263f7d9c2f84840f76b9.tar.gz scummvm-rg350-6117a8919432e7223f3e263f7d9c2f84840f76b9.tar.bz2 scummvm-rg350-6117a8919432e7223f3e263f7d9c2f84840f76b9.zip |
STARTREK: Inventory menu and hotspots
Action buttons now react when hovering over hotspots.
Diffstat (limited to 'engines/startrek/graphics.cpp')
-rw-r--r-- | engines/startrek/graphics.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/engines/startrek/graphics.cpp b/engines/startrek/graphics.cpp index a51999e4d3..e33fa519a4 100644 --- a/engines/startrek/graphics.cpp +++ b/engines/startrek/graphics.cpp @@ -552,6 +552,34 @@ void Graphics::drawAllSprites(bool updateScreen) { } } +/** + * Returns the sprite at the given position (ignores mouse). + */ +Sprite *Graphics::getSpriteAt(int16 x, int16 y) { + for (int i = _numSprites - 1; i >= 0; i--) { + Sprite *sprite = _sprites[i]; + + if (sprite == &_lockedMouseSprite) + continue; + if (sprite->drawMode == 1) // Invisible + continue; + + if (sprite->drawRect.contains(Common::Point(x, y))) { + if (sprite->drawMode == 2 || sprite->drawMode == 3) // Button or text + return sprite; + + // For draw mode 0 only, check that we're not clicking on a transparent part. + int16 relX = x - sprite->drawX; + int16 relY = y - sprite->drawY; + byte pixel = sprite->bitmap->pixels[relY * sprite->bitmap->width + relX]; + if (pixel != 0) + return sprite; + } + } + + return nullptr; +} + void Graphics::addSprite(Sprite *sprite) { if (_numSprites >= MAX_SPRITES) error("addSprite: too many sprites"); |