aboutsummaryrefslogtreecommitdiff
path: root/saga/sprite.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2005-07-08 16:43:36 +0000
committerTorbjörn Andersson2005-07-08 16:43:36 +0000
commit7e0033983fef78e6d1597fc601a700aa2aafe27e (patch)
tree4fb473016920acf19526d2d4ec39848d4ce3db76 /saga/sprite.cpp
parent07b5d93eaa8c6405d075210c903a826ee5774945 (diff)
downloadscummvm-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.cpp33
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()) {