SCI: Check for object visibility, if an object defines it

Fixes the inventory in GK1
This commit is contained in:
Filippos Karapetis 2012-05-14 02:30:15 +03:00
parent 4f6d42d77b
commit 398d0ffcef
4 changed files with 13 additions and 0 deletions

View File

@ -181,6 +181,7 @@ void Kernel::mapSelectors() {
FIND_SELECTOR(skip);
FIND_SELECTOR(fixPriority);
FIND_SELECTOR(mirrored);
FIND_SELECTOR(visible);
FIND_SELECTOR(useInsetRect);
FIND_SELECTOR(inTop);
FIND_SELECTOR(inLeft);

View File

@ -149,6 +149,7 @@ struct SelectorCache {
Selector fixPriority;
Selector mirrored;
Selector visible;
Selector useInsetRect;
Selector inTop, inLeft, inBottom, inRight;

View File

@ -237,6 +237,7 @@ void GfxFrameout::kernelAddScreenItem(reg_t object) {
memset(itemEntry, 0, sizeof(FrameoutEntry));
itemEntry->object = object;
itemEntry->givenOrderNr = _screenItems.size();
itemEntry->visible = true;
_screenItems.push_back(itemEntry);
kernelUpdateScreenItem(object);
@ -266,6 +267,11 @@ void GfxFrameout::kernelUpdateScreenItem(reg_t object) {
itemEntry->signal = readSelectorValue(_segMan, object, SELECTOR(signal));
itemEntry->scaleX = readSelectorValue(_segMan, object, SELECTOR(scaleX));
itemEntry->scaleY = readSelectorValue(_segMan, object, SELECTOR(scaleY));
itemEntry->visible = true;
// Check if the entry can be hidden
if (lookupSelector(_segMan, object, SELECTOR(visible), NULL, NULL) != kSelectorNone)
itemEntry->visible = readSelectorValue(_segMan, object, SELECTOR(visible));
}
void GfxFrameout::kernelDeleteScreenItem(reg_t object) {
@ -433,6 +439,7 @@ void GfxFrameout::createPlaneItemList(reg_t planeObject, FrameoutList &itemList)
picEntry->x = planePicture->getSci32celX(pictureCelNr);
picEntry->picStartX = pictureIt->startX;
picEntry->picStartY = pictureIt->startY;
picEntry->visible = true;
picEntry->priority = planePicture->getSci32celPriority(pictureCelNr);
@ -541,6 +548,9 @@ void GfxFrameout::kernelFrameout() {
for (FrameoutList::iterator listIterator = itemList.begin(); listIterator != itemList.end(); listIterator++) {
FrameoutEntry *itemEntry = *listIterator;
if (!itemEntry->visible)
continue;
if (itemEntry->object.isNull()) {
// Picture cel data
itemEntry->x = upscaleHorizontalCoordinate(itemEntry->x);

View File

@ -60,6 +60,7 @@ struct FrameoutEntry {
GfxPicture *picture;
int16 picStartX;
int16 picStartY;
bool visible;
};
typedef Common::List<FrameoutEntry *> FrameoutList;