aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/graphics.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-05-17 19:35:31 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit6117a8919432e7223f3e263f7d9c2f84840f76b9 (patch)
tree5a605ac102264ce9ea41bc11ba14299a10d0460f /engines/startrek/graphics.cpp
parent02485484c31bee3101ecd3ac7ccb86e2db7b029b (diff)
downloadscummvm-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.cpp28
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");