void GfxFrameout::kernelUpdatePlane(reg_t object) { for (PlaneList::iterator it = _planes.begin(); it != _planes.end(); ++it) { if (it->object == object) { // Read some information it->priority = readSelectorValue(_segMan, object, SELECTOR(priority)); GuiResourceId lastPictureId = it->pictureId; it->pictureId = readSelectorValue(_segMan, object, SELECTOR(picture)); if (lastPictureId != it->pictureId) { // picture got changed, load new picture deletePlanePictures(object); // Draw the plane's picture if it's not a translucent/plane colored frame if ((it->pictureId != kPlanePlainColored) && (it->pictureId != kPlaneTranslucent)) { // SQ6 gives us a bad picture number for the control menu if (_resMan->testResource(ResourceId(kResourceTypePic, it->pictureId))) addPlanePicture(object, it->pictureId, 0); } } it->planeRect.top = readSelectorValue(_segMan, object, SELECTOR(top)); it->planeRect.left = readSelectorValue(_segMan, object, SELECTOR(left)); it->planeRect.bottom = readSelectorValue(_segMan, object, SELECTOR(bottom)); it->planeRect.right = readSelectorValue(_segMan, object, SELECTOR(right)); _coordAdjuster->fromScriptToDisplay(it->planeRect.top, it->planeRect.left); _coordAdjuster->fromScriptToDisplay(it->planeRect.bottom, it->planeRect.right); // We get negative left in kq7 in scrolling rooms if (it->planeRect.left < 0) { it->planeOffsetX = -it->planeRect.left; it->planeRect.left = 0; } else { it->planeOffsetX = 0; } if (it->planeRect.top < 0) { it->planeOffsetY = -it->planeRect.top; it->planeRect.top = 0; } else { it->planeOffsetY = 0; } // We get bad plane-bottom in sq6 if (it->planeRect.right > _screen->getWidth()) it->planeRect.right = _screen->getWidth(); if (it->planeRect.bottom > _screen->getHeight()) it->planeRect.bottom = _screen->getHeight(); it->planeClipRect = Common::Rect(it->planeRect.width(), it->planeRect.height()); it->upscaledPlaneRect = it->planeRect; it->upscaledPlaneClipRect = it->planeClipRect; if (_screen->getUpscaledHires()) { _screen->adjustToUpscaledCoordinates(it->upscaledPlaneRect.top, it->upscaledPlaneRect.left); _screen->adjustToUpscaledCoordinates(it->upscaledPlaneRect.bottom, it->upscaledPlaneRect.right); _screen->adjustToUpscaledCoordinates(it->upscaledPlaneClipRect.top, it->upscaledPlaneClipRect.left); _screen->adjustToUpscaledCoordinates(it->upscaledPlaneClipRect.bottom, it->upscaledPlaneClipRect.right); } it->planePictureMirrored = readSelectorValue(_segMan, object, SELECTOR(mirrored)); it->planeBack = readSelectorValue(_segMan, object, SELECTOR(back)); sortPlanes(); // Update the items in the plane for (FrameoutList::iterator listIterator = _screenItems.begin(); listIterator != _screenItems.end(); listIterator++) { reg_t itemPlane = readSelector(_segMan, (*listIterator)->object, SELECTOR(plane)); if (object == itemPlane) { kernelUpdateScreenItem((*listIterator)->object); } } return; } } error("kUpdatePlane called on plane that wasn't added before"); }
void GfxFrameout::kernelAddPicAt(reg_t planeObj, GuiResourceId pictureId, int16 pictureX, int16 pictureY) { addPlanePicture(planeObj, pictureId, pictureX, pictureY); }
// TODO: No idea yet how to implement this void GfxFrameout::kernelAddPicAt(reg_t planeObj, int16 forWidth, GuiResourceId pictureId) { addPlanePicture(planeObj, pictureId, forWidth); }