Added tests for validating enemy sprite ranges
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:test/test.dart';
|
||||
import 'package:wolf_3d_dart/src/entities/entities/enemies/enemy_type.dart';
|
||||
|
||||
void main() {
|
||||
group('Enemy Sprite Range Validation', () {
|
||||
test('No enemy animations should have overlapping sprite indices', () {
|
||||
final allEnemies = EnemyType.values;
|
||||
final overlaps = <String>[];
|
||||
|
||||
for (int i = 0; i < allEnemies.length; i++) {
|
||||
final enemyA = allEnemies[i];
|
||||
final animationsA = enemyA.animations.allRanges;
|
||||
|
||||
for (int j = i; j < allEnemies.length; j++) {
|
||||
final enemyB = allEnemies[j];
|
||||
final animationsB = enemyB.animations.allRanges;
|
||||
|
||||
animationsA.forEach((animA, rangeA) {
|
||||
animationsB.forEach((animB, rangeB) {
|
||||
// Skip if we are comparing the exact same animation on the same enemy
|
||||
if (enemyA == enemyB && animA == animB) return;
|
||||
|
||||
if (rangeA.overlaps(rangeB)) {
|
||||
// Determine the specific frames that are clashing
|
||||
final start = math.max(rangeA.start, rangeB.start);
|
||||
final end = math.min(rangeA.end, rangeB.end);
|
||||
final clashingFrames = <int>[];
|
||||
|
||||
for (int f = start; f <= end; f++) {
|
||||
if (rangeA.contains(f) && rangeB.contains(f)) {
|
||||
clashingFrames.add(f);
|
||||
}
|
||||
}
|
||||
|
||||
if (clashingFrames.isNotEmpty) {
|
||||
overlaps.add(
|
||||
'${enemyA.name}.${animA.name} overlaps ${enemyB.name}.${animB.name} on frames: $clashingFrames',
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Assert that the list of overlaps is empty
|
||||
expect(
|
||||
overlaps,
|
||||
isEmpty,
|
||||
reason: 'Detected sprite index collisions:\n${overlaps.join('\n')}',
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user