aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/plane32.cpp
diff options
context:
space:
mode:
authorColin Snover2016-03-05 23:58:19 -0600
committerColin Snover2016-03-06 21:34:43 -0600
commit3e631ca5e3a3e19cb08be83c039ae9681a2e6cbc (patch)
treeab826fec09d5c39d16b7d26a23894db74b8f0287 /engines/sci/graphics/plane32.cpp
parente8d6ad1d0bcfef12bdf468c9a6a80cd14ae2d8f7 (diff)
downloadscummvm-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.cpp15
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));
}