diff options
author | Colin Snover | 2016-03-05 23:58:19 -0600 |
---|---|---|
committer | Colin Snover | 2016-03-06 21:34:43 -0600 |
commit | 3e631ca5e3a3e19cb08be83c039ae9681a2e6cbc (patch) | |
tree | ab826fec09d5c39d16b7d26a23894db74b8f0287 /engines/sci/graphics/plane32.cpp | |
parent | e8d6ad1d0bcfef12bdf468c9a6a80cd14ae2d8f7 (diff) | |
download | scummvm-rg350-3e631ca5e3a3e19cb08be83c039ae9681a2e6cbc.tar.gz scummvm-rg350-3e631ca5e3a3e19cb08be83c039ae9681a2e6cbc.tar.bz2 scummvm-rg350-3e631ca5e3a3e19cb08be83c039ae9681a2e6cbc.zip |
SCI32: "Improve" comparison algorithm for planes and screen items
This adds a slightly more accurate comparison algorithm that will
at least ensure that all the engine-generated planes and screen
items with matching priorities will be sorted above
script-generated planes and screen items, like in the original
engine. It still does not sort script-generated items by memory
handle order, so if that is ever a thing that actually happens,
those may still be in the wrong order.
Diffstat (limited to 'engines/sci/graphics/plane32.cpp')
-rw-r--r-- | engines/sci/graphics/plane32.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/engines/sci/graphics/plane32.cpp b/engines/sci/graphics/plane32.cpp index 7d1487bd7c..0a0b0ad561 100644 --- a/engines/sci/graphics/plane32.cpp +++ b/engines/sci/graphics/plane32.cpp @@ -447,7 +447,20 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList if (j < _screenItemList.size() && sli) { if (!sli->_updated && !sli->_deleted && !sli->_created) { ScreenItem *item = dli->screenItem; - if (sli->_priority > item->_priority /* TODO: || (sli->_priority == item->_priority && sli->_object > item->_object)*/) { + + bool isAbove = false; + if (sli->_priority > item->_priority) { + isAbove = true; + } + else if (sli->_priority == item->_priority) { + if (sli->_object.isNumber() && item->_object.isNumber()) { + isAbove = sli->_object > item->_object; + } else if (sli->_object.isNumber()) { + isAbove = true; + } + } + + if (isAbove) { if (dli->rect.intersects(sli->_screenRect)) { drawList.add(sli, dli->rect.findIntersectingRect(sli->_screenRect)); } |