1 #ifndef SPRITECHECKER_HH
2 #define SPRITECHECKER_HH
61 if (!updateSpritesMethod) {
71 static bool syncInProgress =
false;
72 assert(!syncInProgress);
73 syncInProgress =
true;
78 syncInProgress =
false;
166 if (currentLine < limit) {
168 (this->*updateSpritesMethod)(limit);
191 collisionX = collisionY = 0;
198 frameStartTime.
reset(time);
200 for (
int i = 0; i < 313; i++) spriteCount[i] = 0;
231 if (line < 0)
return 0;
233 visibleSprites = spriteBuffer[line];
234 return spriteCount[line];
247 template<
typename Archive>
248 void serialize(Archive& ar,
unsigned version);
256 updateSpritesMethod =
nullptr;
259 updateSpritesMethod = &SpriteChecker::updateSprites1;
262 updateSpritesMethod = &SpriteChecker::updateSprites2;
274 void updateSprites1(
int limit);
278 void updateSprites2(
int limit);
288 inline SpritePattern calculatePatternNP(
unsigned patternNr,
unsigned y);
289 inline SpritePattern calculatePatternPlanar(
unsigned patternNr,
unsigned y);
301 inline void checkSprites1(
int minLine,
int maxLine);
313 inline void checkSprites2(
int minLine,
int maxLine);
315 typedef void (
SpriteChecker::*UpdateSpritesMethod)(
int limit);
316 UpdateSpritesMethod updateSpritesMethod;
332 BooleanSetting& limitSpritesSetting;
336 Clock<VDP::TICKS_PER_SECOND> frameStartTime;
357 SpriteInfo spriteBuffer[313][32 + 1];
364 int spriteCount[313];