[Scummvm-cvs-logs] CVS: scummvm/saga puzzle.cpp,1.7,1.8 sprite.cpp,1.54,1.55 sprite.h,1.18,1.19

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Fri Jul 8 09:44:10 CEST 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15965

Modified Files:
	puzzle.cpp sprite.cpp sprite.h 
Log Message:
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.


Index: puzzle.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/puzzle.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- puzzle.cpp	15 Jun 2005 19:26:31 -0000	1.7
+++ puzzle.cpp	8 Jul 2005 16:43:36 -0000	1.8
@@ -275,9 +275,14 @@
 void Puzzle::drawCurrentPiece() {
 	ActorData *puzzle = _vm->_actor->getActor(_vm->_actor->actorIndexToId(ITE_ACTOR_PUZZLE));
 	SURFACE *backBuffer = _vm->_gfx->getBackBuffer();
+	SCENE_BGINFO bg_info;
+
+	_vm->_scene->getBGInfo(&bg_info);
+
+	Rect clip(bg_info.bg_x, bg_info.bg_y, bg_info.bg_x + bg_info.bg_w, bg_info.bg_y + bg_info.bg_h);
 
 	_vm->_sprite->draw(backBuffer, puzzle->spriteList, _puzzlePiece, 
-			   Point(_pieceInfo[_puzzlePiece].curX, _pieceInfo[_puzzlePiece].curY), 256);
+			   Point(_pieceInfo[_puzzlePiece].curX, _pieceInfo[_puzzlePiece].curY), 256, &clip);
 }
 
 void Puzzle::movePiece(Point mousePt) {

Index: sprite.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sprite.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- sprite.cpp	5 Jul 2005 16:58:36 -0000	1.54
+++ sprite.cpp	8 Jul 2005 16:43:36 -0000	1.55
@@ -217,17 +217,29 @@
 	}
 }
 
-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 @@
 	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 @@
 	byte *mask_row_p;
 	int mask_z;
 
-
 	assert(_initialized);
 
 	if (!_vm->_scene->isBGMaskPresent()) {

Index: sprite.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sprite.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- sprite.h	22 Apr 2005 14:11:04 -0000	1.18
+++ sprite.h	8 Jul 2005 16:43:36 -0000	1.19
@@ -60,18 +60,15 @@
 	}
 };
 
-
 class Sprite {
 public:
 	SpriteList _mainSprites;
 
-	
-
 	Sprite(SagaEngine *vm);
 	~Sprite(void);
 	int loadList(int resourceId, SpriteList &spriteList); // load or append spriteList
-	int draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale);
-	int draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale);
+	int draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale, Rect *clipOverride = NULL);
+	int draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale, Rect *clipOverride = NULL);
 	int drawOccluded(SURFACE *ds, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth);
 	bool hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint);
 	void getScaledSpriteBuffer(SpriteList &spriteList, int spriteNumber, int scale, int &width, int &height, int &xAlign, int &yAlign, const byte *&buffer);





More information about the Scummvm-git-logs mailing list