Files
wolf_dart/lib/sprite_gallery.dart
2026-03-13 18:06:40 +01:00

65 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:wolf_dart/classes/color_palette.dart';
import 'package:wolf_dart/classes/matrix.dart';
class SpriteGallery extends StatelessWidget {
final List<Matrix<int>> sprites;
const SpriteGallery({super.key, required this.sprites});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("VSWAP Sprite Gallery")),
backgroundColor: Colors.black,
body: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 8, // 8 sprites per row
),
itemCount: sprites.length,
itemBuilder: (context, index) {
return Column(
children: [
Text(
"Idx: $index",
style: const TextStyle(color: Colors.white, fontSize: 10),
),
Expanded(
child: CustomPaint(
painter: SingleSpritePainter(sprite: sprites[index]),
size: const Size(64, 64),
),
),
],
);
},
),
);
}
}
class SingleSpritePainter extends CustomPainter {
final Matrix<int> sprite;
SingleSpritePainter({required this.sprite});
@override
void paint(Canvas canvas, Size size) {
double pixelSize = size.width / 64;
for (int x = 0; x < 64; x++) {
for (int y = 0; y < 64; y++) {
int colorByte = sprite[x][y];
if (colorByte != 255) {
// Skip transparency
canvas.drawRect(
Rect.fromLTWH(x * pixelSize, y * pixelSize, pixelSize, pixelSize),
Paint()..color = ColorPalette.vga[colorByte],
);
}
}
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}