diff options
Diffstat (limited to 'engines/sci/graphics/plane32.cpp')
-rw-r--r-- | engines/sci/graphics/plane32.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/engines/sci/graphics/plane32.cpp b/engines/sci/graphics/plane32.cpp index f56df4dced..aa8cd52d42 100644 --- a/engines/sci/graphics/plane32.cpp +++ b/engines/sci/graphics/plane32.cpp @@ -44,8 +44,10 @@ void DrawList::add(ScreenItem *screenItem, const Common::Rect &rect) { #pragma mark - #pragma mark Plane uint16 Plane::_nextObjectId = 20000; +uint32 Plane::_nextCreationId = 0; Plane::Plane(const Common::Rect &gameRect, PlanePictureCodes pictureId) : +_creationId(_nextCreationId++), _pictureId(pictureId), _mirrored(false), _type(kPlaneTypeColored), @@ -65,6 +67,7 @@ _gameRect(gameRect) { } Plane::Plane(reg_t object) : +_creationId(_nextCreationId++), _type(kPlaneTypeColored), _priorityChanged(false), _object(object), @@ -77,10 +80,17 @@ _moved(0) { _vanishingPoint.x = readSelectorValue(segMan, object, SELECTOR(vanishingX)); _vanishingPoint.y = readSelectorValue(segMan, object, SELECTOR(vanishingY)); - _gameRect.left = readSelectorValue(segMan, object, SELECTOR(inLeft)); - _gameRect.top = readSelectorValue(segMan, object, SELECTOR(inTop)); - _gameRect.right = readSelectorValue(segMan, object, SELECTOR(inRight)) + 1; - _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(inBottom)) + 1; + if (g_sci->_features->usesAlternateSelectors()) { + _gameRect.left = readSelectorValue(segMan, object, SELECTOR(left)); + _gameRect.top = readSelectorValue(segMan, object, SELECTOR(top)); + _gameRect.right = readSelectorValue(segMan, object, SELECTOR(right)) + 1; + _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(bottom)) + 1; + } else { + _gameRect.left = readSelectorValue(segMan, object, SELECTOR(inLeft)); + _gameRect.top = readSelectorValue(segMan, object, SELECTOR(inTop)); + _gameRect.right = readSelectorValue(segMan, object, SELECTOR(inRight)) + 1; + _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(inBottom)) + 1; + } convertGameRectToPlaneRect(); _back = readSelectorValue(segMan, object, SELECTOR(back)); @@ -94,6 +104,7 @@ _moved(0) { } Plane::Plane(const Plane &other) : +_creationId(other._creationId), _pictureId(other._pictureId), _mirrored(other._mirrored), _type(other._type), @@ -106,6 +117,7 @@ _screenRect(other._screenRect), _screenItemList(other._screenItemList) {} void Plane::operator=(const Plane &other) { + _creationId = other._creationId; _gameRect = other._gameRect; _planeRect = other._planeRect; _vanishingPoint = other._vanishingPoint; @@ -120,6 +132,7 @@ void Plane::operator=(const Plane &other) { void Plane::init() { _nextObjectId = 20000; + _nextCreationId = 0; } void Plane::convertGameRectToPlaneRect() { @@ -144,11 +157,12 @@ void Plane::printDebugInfo(Console *con) const { name = g_sci->getEngineState()->_segMan->getObjectName(_object); } - con->debugPrintf("%04x:%04x (%s): type %d, prio %d, pic %d, mirror %d, back %d\n", + con->debugPrintf("%04x:%04x (%s): type %d, prio %d, ins %u, pic %d, mirror %d, back %d\n", PRINT_REG(_object), name.c_str(), _type, _priority, + _creationId, _pictureId, _mirrored, _back @@ -508,7 +522,7 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList const ScreenItem *drawnItem = drawListEntry->screenItem; if ( - (newItem->_priority > drawnItem->_priority || (newItem->_priority == drawnItem->_priority && newItem->_object > drawnItem->_object)) && + (newItem->_priority > drawnItem->_priority || (newItem->_priority == drawnItem->_priority && newItem->_creationId > drawnItem->_creationId)) && drawListEntry->rect.intersects(newItem->_screenRect) ) { mergeToDrawList(j, drawListEntry->rect.findIntersectingRect(newItem->_screenRect), drawList); @@ -822,10 +836,18 @@ void Plane::update(const reg_t object) { SegManager *segMan = g_sci->getEngineState()->_segMan; _vanishingPoint.x = readSelectorValue(segMan, object, SELECTOR(vanishingX)); _vanishingPoint.y = readSelectorValue(segMan, object, SELECTOR(vanishingY)); - _gameRect.left = readSelectorValue(segMan, object, SELECTOR(inLeft)); - _gameRect.top = readSelectorValue(segMan, object, SELECTOR(inTop)); - _gameRect.right = readSelectorValue(segMan, object, SELECTOR(inRight)) + 1; - _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(inBottom)) + 1; + + if (g_sci->_features->usesAlternateSelectors()) { + _gameRect.left = readSelectorValue(segMan, object, SELECTOR(left)); + _gameRect.top = readSelectorValue(segMan, object, SELECTOR(top)); + _gameRect.right = readSelectorValue(segMan, object, SELECTOR(right)) + 1; + _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(bottom)) + 1; + } else { + _gameRect.left = readSelectorValue(segMan, object, SELECTOR(inLeft)); + _gameRect.top = readSelectorValue(segMan, object, SELECTOR(inTop)); + _gameRect.right = readSelectorValue(segMan, object, SELECTOR(inRight)) + 1; + _gameRect.bottom = readSelectorValue(segMan, object, SELECTOR(inBottom)) + 1; + } convertGameRectToPlaneRect(); _priority = readSelectorValue(segMan, object, SELECTOR(priority)); |