[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.360,2.361 sprite_he.cpp,1.36,1.37
Eugene Sandulenko
sev at users.sourceforge.net
Wed Feb 23 15:30:05 CET 2005
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3204
Modified Files:
intern.h sprite_he.cpp
Log Message:
implementation of spritesSortActiveSprites()
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.360
retrieving revision 2.361
diff -u -d -r2.360 -r2.361
--- intern.h 23 Feb 2005 12:26:16 -0000 2.360
+++ intern.h 23 Feb 2005 23:28:53 -0000 2.361
@@ -971,6 +971,7 @@
void spritesMarkDirty(bool unkFlag);
void spritesUpdateImages();
void spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr);
+ void spritesSortActiveSprites();
/* HE version 90 script opcodes */
void o90_dup();
Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- sprite_he.cpp 23 Feb 2005 12:26:17 -0000 1.36
+++ sprite_he.cpp 23 Feb 2005 23:28:53 -0000 1.37
@@ -1091,4 +1091,52 @@
}
}
+static int compareSprTable(const void *a, const void *b) {
+ const SpriteInfo *spr1 = *(const SpriteInfo *const*)a;
+ const SpriteInfo *spr2 = *(const SpriteInfo *const*)b;
+
+ if (spr1->field_0 > spr2->field_0)
+ return 1;
+
+ if (spr1->field_0 < spr2->field_0)
+ return -1;
+
+ return 0;
+}
+
+void ScummEngine_v90he::spritesSortActiveSprites() {
+ int groupField;
+
+ _numSpritesToProcess = 0;
+
+ if (_varNumSprites <= 1)
+ return;
+
+ for (int i = 1; i < _varNumSprites; i++) {
+ SpriteInfo *spi = &_spriteTable[i];
+
+ if (spi->flags & kSF08) {
+ if (!spi->flags & kSF23) {
+ if (!spi->flags & kSF30)
+ spi->flags |= kSFNeedRedraw;
+ if (!spi->flags & kSF31)
+ spi->flags |= kSF01;
+ }
+ if (spi->group_num)
+ groupField = _spriteGroups[spi->group_num].field_10;
+ else
+ groupField = 0;
+
+ spi->field_0 = spi->field_18 + groupField;
+
+ _activeSpritesTable[_numSpritesToProcess++] = spi;
+ }
+ }
+
+ if (_numSpritesToProcess < 2)
+ return;
+
+ qsort(_activeSpritesTable, _numSpritesToProcess, sizeof(SpriteInfo *), compareSprTable);
+}
+
} // End of namespace Scumm
More information about the Scummvm-git-logs
mailing list