import 'package:flutter/material.dart'; import 'package:wolf_3d_dart/wolf_3d_data_types.dart'; import 'package:wolf_3d_dart/wolf_3d_entities.dart'; import 'package:wolf_3d_flutter/wolf_3d.dart'; import 'package:wolf_3d_renderer/wolf_3d_asset_painter.dart'; class SpriteGallery extends StatelessWidget { final Wolf3d wolf3d; const SpriteGallery({super.key, required this.wolf3d}); bool get isShareware => wolf3d.activeGame.version == GameVersion.shareware; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Sprite Gallery"), automaticallyImplyLeading: true, ), backgroundColor: Colors.black, body: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 8, crossAxisSpacing: 8, mainAxisSpacing: 8, ), itemCount: wolf3d.sprites.length, itemBuilder: (context, index) { String label = "Sprite Index: $index"; for (final enemy in EnemyType.values) { if (enemy.claimsSpriteIndex(index, isShareware: isShareware)) { final EnemyAnimation? animation = enemy.getAnimationFromSprite( index, isShareware: isShareware, ); label += "\n${enemy.name}"; if (animation != null) { label += "\n${animation.name}"; } break; } } return Card( color: Colors.blueGrey, child: Column( spacing: 8, children: [ Text( label, style: const TextStyle(color: Colors.white, fontSize: 10), textAlign: TextAlign.center, ), Expanded( child: AspectRatio( aspectRatio: 4 / 3, child: WolfAssetPainter.sprite(wolf3d.sprites[index]), ), ), ], ), ); }, ), ); } }