mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 19:51:49 +00:00
Bugfixes for correct moving of the screen viewport within an animation
svn-id: r49629
This commit is contained in:
parent
466479eb77
commit
4c6d276ce9
@ -333,13 +333,15 @@ void MadsAnimation::update() {
|
||||
|
||||
// Handle any offset adjustment for sprites as of this frame
|
||||
if (_view->_posAdjust.x != misc.posAdjust.x) {
|
||||
misc.posAdjust.x = _view->_posAdjust.x;
|
||||
_view->_posAdjust.x = misc.posAdjust.x;
|
||||
screenChanged = true;
|
||||
}
|
||||
if (_view->_posAdjust.y != misc.posAdjust.y) {
|
||||
misc.posAdjust.y = _view->_posAdjust.y;
|
||||
_view->_posAdjust.y = misc.posAdjust.y;
|
||||
screenChanged = true;
|
||||
}
|
||||
|
||||
|
||||
if (screenChanged) {
|
||||
// Signal the entire screen needs refreshing
|
||||
_view->_spriteSlots.fullRefresh();
|
||||
|
@ -655,7 +655,6 @@ void MadsSceneResources::load(int sceneNumber, const char *resName, int v0, M4Su
|
||||
drawStyle = stream->readUint16LE();
|
||||
width = stream->readUint16LE();
|
||||
height = stream->readUint16LE();
|
||||
assert((width == 320) && (height == 156));
|
||||
|
||||
stream->skip(24);
|
||||
|
||||
|
@ -855,10 +855,15 @@ void MadsDirtyAreas::mergeAreas(int idx1, int idx2) {
|
||||
da1.textActive = true;
|
||||
}
|
||||
|
||||
void MadsDirtyAreas::copy(M4Surface *dest, M4Surface *src, int yOffset) {
|
||||
void MadsDirtyAreas::copy(M4Surface *dest, M4Surface *src, int yOffset, const Common::Point &posAdjust) {
|
||||
for (uint i = 0; i < _entries.size(); ++i) {
|
||||
const Common::Rect &srcBounds = _entries[i].bounds;
|
||||
|
||||
Common::Rect bounds(srcBounds.left + posAdjust.x, srcBounds.top + posAdjust.y,
|
||||
srcBounds.right + posAdjust.x, srcBounds.bottom + posAdjust.y);
|
||||
|
||||
if (_entries[i].active && _entries[i].bounds.isValidRect())
|
||||
src->copyTo(dest, _entries[i].bounds, _entries[i].bounds.left, _entries[i].bounds.top + yOffset);
|
||||
src->copyTo(dest, bounds, _entries[i].bounds.left, _entries[i].bounds.top + yOffset);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1202,7 +1207,7 @@ void MadsView::refresh() {
|
||||
_dirtyAreas.merge(1, DIRTY_AREAS_SIZE);
|
||||
|
||||
// Copy dirty areas to the main display surface
|
||||
_dirtyAreas.copy(_view, _bgSurface, _yOffset);
|
||||
_dirtyAreas.copy(_view, _bgSurface, _yOffset, _posAdjust);
|
||||
|
||||
// Handle dirty areas for foreground objects
|
||||
_spriteSlots.setDirtyAreas();
|
||||
|
@ -289,7 +289,7 @@ public:
|
||||
void merge(int startIndex, int count);
|
||||
bool intersects(int idx1, int idx2);
|
||||
void mergeAreas(int idx1, int idx2);
|
||||
void copy(M4Surface *dest, M4Surface *src, int yOffset);
|
||||
void copy(M4Surface *dest, M4Surface *src, int yOffset, const Common::Point &posAdjust);
|
||||
};
|
||||
|
||||
enum SpriteAnimType {ANIMTYPE_CYCLED = 1, ANIMTYPE_REVERSIBLE = 2};
|
||||
|
Loading…
x
Reference in New Issue
Block a user