diff options
author | Torbjörn Andersson | 2005-07-08 16:43:36 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2005-07-08 16:43:36 +0000 |
commit | 7e0033983fef78e6d1597fc601a700aa2aafe27e (patch) | |
tree | 4fb473016920acf19526d2d4ec39848d4ce3db76 /saga/sprite.cpp | |
parent | 07b5d93eaa8c6405d075210c903a826ee5774945 (diff) | |
download | scummvm-rg350-7e0033983fef78e6d1597fc601a700aa2aafe27e.tar.gz scummvm-rg350-7e0033983fef78e6d1597fc601a700aa2aafe27e.tar.bz2 scummvm-rg350-7e0033983fef78e6d1597fc601a700aa2aafe27e.zip |
Extended the sprite draw() functions so that a clip rect can be specified,
and used that to clip the puzzle piece being moved around to avoid
graphics glitches.
svn-id: r18515
Diffstat (limited to 'saga/sprite.cpp')
-rw-r--r-- | saga/sprite.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/saga/sprite.cpp b/saga/sprite.cpp index 6ceca6f12d..0392c699de 100644 --- a/saga/sprite.cpp +++ b/saga/sprite.cpp @@ -217,17 +217,29 @@ void Sprite::drawClip(SURFACE *ds, Rect clip, const Point &spritePointer, int wi } } -int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) { +int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale, Rect *clipOverride) { const byte *spriteBuffer; int width; int height; int xAlign; int yAlign; Point spritePointer; - Rect clip(_vm->getDisplayWidth(),_vm->getDisplayHeight()); + Rect clip; assert(_initialized); + if (clipOverride) { + clip.left = clipOverride->left; + clip.right = clipOverride->right; + clip.top = clipOverride->top; + clip.bottom = clipOverride->bottom; + } else { + clip.left = 0; + clip.right = _vm->getDisplayWidth(); + clip.top = 0; + clip.bottom = _vm->getDisplayHeight(); + } + getScaledSpriteBuffer(spriteList, spriteNumber, scale, width, height, xAlign, yAlign, spriteBuffer); spritePointer.x = screenCoord.x + xAlign; @@ -237,17 +249,29 @@ int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const return SUCCESS; } -int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale) { +int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale, Rect *clipOverride) { const byte *spriteBuffer; int width; int height; int xAlign, spw; int yAlign, sph; Point spritePointer; - Rect clip(_vm->getDisplayWidth(),_vm->getDisplayHeight()); + Rect clip; assert(_initialized); + if (clipOverride) { + clip.left = clipOverride->left; + clip.right = clipOverride->right; + clip.top = clipOverride->top; + clip.bottom = clipOverride->bottom; + } else { + clip.left = 0; + clip.right = _vm->getDisplayWidth(); + clip.top = 0; + clip.bottom = _vm->getDisplayHeight(); + } + getScaledSpriteBuffer(spriteList, spriteNumber, scale, width, height, xAlign, yAlign, spriteBuffer); spw = (screenRect.width() - width) / 2; sph = (screenRect.height() - height) / 2; @@ -319,7 +343,6 @@ int Sprite::drawOccluded(SURFACE *ds, SpriteList &spriteList, int spriteNumber, byte *mask_row_p; int mask_z; - assert(_initialized); if (!_vm->_scene->isBGMaskPresent()) { |