diff --git a/lib/classes/sprite.dart b/lib/classes/sprite.dart deleted file mode 100644 index becb972..0000000 --- a/lib/classes/sprite.dart +++ /dev/null @@ -1 +0,0 @@ -typedef Sprite = List>; diff --git a/lib/features/entities/door_manager.dart b/lib/features/entities/door_manager.dart index 0581e32..34ead83 100644 --- a/lib/features/entities/door_manager.dart +++ b/lib/features/entities/door_manager.dart @@ -1,6 +1,6 @@ import 'dart:math' as math; -import 'package:wolf_dart/classes/sprite.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/map/door.dart'; class DoorManager { diff --git a/lib/features/entities/pushwall_manager.dart b/lib/features/entities/pushwall_manager.dart index bc7bb8a..d92620f 100644 --- a/lib/features/entities/pushwall_manager.dart +++ b/lib/features/entities/pushwall_manager.dart @@ -1,12 +1,12 @@ import 'dart:math' as math; -import 'package:wolf_dart/classes/matrix.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/entities/map_objects.dart'; class Pushwall { int x; int y; - int mapId; // The wall texture ID + int mapId; int dirX = 0; int dirY = 0; double offset = 0.0; @@ -19,7 +19,7 @@ class PushwallManager { final Map pushwalls = {}; Pushwall? activePushwall; - void initPushwalls(Matrix wallGrid, Matrix objectGrid) { + void initPushwalls(Sprite wallGrid, Sprite objectGrid) { pushwalls.clear(); activePushwall = null; @@ -32,7 +32,7 @@ class PushwallManager { } } - void update(Duration elapsed, Matrix wallGrid) { + void update(Duration elapsed, Sprite wallGrid) { if (activePushwall == null) return; final pw = activePushwall!; @@ -85,7 +85,7 @@ class PushwallManager { double playerX, double playerY, double playerAngle, - Matrix wallGrid, + Sprite wallGrid, ) { // Only one pushwall can move at a time in the original engine! if (activePushwall != null) return; diff --git a/lib/features/map/wolf_level.dart b/lib/features/map/wolf_level.dart index fc05612..6c3c997 100644 --- a/lib/features/map/wolf_level.dart +++ b/lib/features/map/wolf_level.dart @@ -1,11 +1,11 @@ -import 'package:wolf_dart/classes/matrix.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; class WolfLevel { final String name; final int width; // Always 64 in standard Wolf3D final int height; // Always 64 - final Matrix wallGrid; - final Matrix objectGrid; + final Sprite wallGrid; + final Sprite objectGrid; WolfLevel({ required this.name, diff --git a/lib/features/map/wolf_map.dart b/lib/features/map/wolf_map.dart index c31548a..9dba27d 100644 --- a/lib/features/map/wolf_map.dart +++ b/lib/features/map/wolf_map.dart @@ -1,14 +1,13 @@ import 'package:flutter/services.dart'; -import 'package:wolf_dart/classes/matrix.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/map/wolf_level.dart'; import 'package:wolf_dart/features/map/wolf_map_parser.dart'; -import 'package:wolf_dart/vswap_parser.dart'; class WolfMap { /// The fully parsed and decompressed levels from the game files. final List levels; - final List> textures; - final List> sprites; + final List textures; + final List sprites; // A private constructor so we can only instantiate this from the async loader WolfMap._( diff --git a/lib/features/map/wolf_map_parser.dart b/lib/features/map/wolf_map_parser.dart index 9c5c274..9c49a22 100644 --- a/lib/features/map/wolf_map_parser.dart +++ b/lib/features/map/wolf_map_parser.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:wolf_dart/classes/matrix.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/entities/map_objects.dart'; import 'package:wolf_dart/features/map/wolf_level.dart'; @@ -86,8 +86,8 @@ abstract class WolfMapParser { } } - Matrix wallGrid = []; - Matrix objectGrid = []; // NEW + Sprite wallGrid = []; + Sprite objectGrid = []; // NEW for (int y = 0; y < height; y++) { List wallRow = []; diff --git a/lib/features/renderer/raycast_painter.dart b/lib/features/renderer/raycast_painter.dart index 4ae4009..eb4ccd1 100644 --- a/lib/features/renderer/raycast_painter.dart +++ b/lib/features/renderer/raycast_painter.dart @@ -1,21 +1,21 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/classes/coordinate_2d.dart'; -import 'package:wolf_dart/classes/matrix.dart'; import 'package:wolf_dart/features/entities/entity.dart'; -import 'package:wolf_dart/features/entities/pushwall_manager.dart'; // NEW IMPORT +import 'package:wolf_dart/features/entities/pushwall_manager.dart'; import 'package:wolf_dart/features/player/player.dart'; import 'package:wolf_dart/features/renderer/color_palette.dart'; class RaycasterPainter extends CustomPainter { - final Matrix map; - final List> textures; + final Level map; + final List textures; final Player player; final double fov; final Map doorOffsets; - final Pushwall? activePushwall; // NEW - final List> sprites; + final Pushwall? activePushwall; + final List sprites; final List entities; RaycasterPainter({ @@ -24,7 +24,7 @@ class RaycasterPainter extends CustomPainter { required this.player, required this.fov, required this.doorOffsets, - this.activePushwall, // NEW + this.activePushwall, required this.sprites, required this.entities, }); @@ -289,7 +289,7 @@ class RaycasterPainter extends CustomPainter { double drawX = stripe * columnWidth; int safeIndex = entity.spriteIndex.clamp(0, sprites.length - 1); - Matrix spritePixels = sprites[safeIndex]; + Sprite spritePixels = sprites[safeIndex]; for (int ty = 0; ty < 64; ty++) { int colorByte = spritePixels[texX][ty]; @@ -322,7 +322,7 @@ class RaycasterPainter extends CustomPainter { int side, Size size, int hitWallId, - List> textures, + List textures, double textureOffset, Paint paint, ) { diff --git a/lib/features/renderer/renderer.dart b/lib/features/renderer/renderer.dart index 2fab44a..bb7eb7a 100644 --- a/lib/features/renderer/renderer.dart +++ b/lib/features/renderer/renderer.dart @@ -2,8 +2,8 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/classes/coordinate_2d.dart'; -import 'package:wolf_dart/classes/matrix.dart'; import 'package:wolf_dart/features/difficulty/difficulty.dart'; import 'package:wolf_dart/features/entities/collectible.dart'; import 'package:wolf_dart/features/entities/door_manager.dart'; @@ -45,7 +45,7 @@ class _WolfRendererState extends State late Ticker _gameLoop; final FocusNode _focusNode = FocusNode(); late WolfMap gameMap; - late Matrix currentLevel; + late Level currentLevel; final double fov = math.pi / 3; @@ -71,7 +71,7 @@ class _WolfRendererState extends State doorManager.initDoors(currentLevel); - final Matrix objectLevel = gameMap.levels[0].objectGrid; + final Level objectLevel = gameMap.levels[0].objectGrid; pushwallManager.initPushwalls(currentLevel, objectLevel); diff --git a/lib/features/renderer/weapon_painter.dart b/lib/features/renderer/weapon_painter.dart index 536701e..646ac1c 100644 --- a/lib/features/renderer/weapon_painter.dart +++ b/lib/features/renderer/weapon_painter.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wolf_dart/classes/sprite.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/renderer/color_palette.dart'; class WeaponPainter extends CustomPainter { diff --git a/lib/sprite_gallery.dart b/lib/sprite_gallery.dart index 3b3631a..91d66ef 100644 --- a/lib/sprite_gallery.dart +++ b/lib/sprite_gallery.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:wolf_dart/classes/matrix.dart'; +import 'package:wolf_3d_data/wolf_3d_data.dart'; import 'package:wolf_dart/features/renderer/color_palette.dart'; class SpriteGallery extends StatelessWidget { - final List> sprites; + final List sprites; const SpriteGallery({super.key, required this.sprites}); @@ -42,7 +42,7 @@ class SpriteGallery extends StatelessWidget { } class SingleSpritePainter extends CustomPainter { - final Matrix sprite; + final Sprite sprite; SingleSpritePainter({required this.sprite}); @override diff --git a/packages/wolf_3d_data/.gitignore b/packages/wolf_3d_data/.gitignore new file mode 100644 index 0000000..3cceda5 --- /dev/null +++ b/packages/wolf_3d_data/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wolf_3d_data/CHANGELOG.md b/packages/wolf_3d_data/CHANGELOG.md new file mode 100644 index 0000000..effe43c --- /dev/null +++ b/packages/wolf_3d_data/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/wolf_3d_data/README.md b/packages/wolf_3d_data/README.md new file mode 100644 index 0000000..8831761 --- /dev/null +++ b/packages/wolf_3d_data/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/packages/wolf_3d_data/analysis_options.yaml b/packages/wolf_3d_data/analysis_options.yaml new file mode 100644 index 0000000..dee8927 --- /dev/null +++ b/packages/wolf_3d_data/analysis_options.yaml @@ -0,0 +1,30 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + +# linter: +# rules: +# - camel_case_types + +# analyzer: +# exclude: +# - path/to/excluded/files/** + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/packages/wolf_3d_data/lib/src/classes/level.dart b/packages/wolf_3d_data/lib/src/classes/level.dart new file mode 100644 index 0000000..c179a9c --- /dev/null +++ b/packages/wolf_3d_data/lib/src/classes/level.dart @@ -0,0 +1,3 @@ +import 'matrix.dart'; + +typedef Level = Matrix; diff --git a/lib/classes/matrix.dart b/packages/wolf_3d_data/lib/src/classes/matrix.dart similarity index 100% rename from lib/classes/matrix.dart rename to packages/wolf_3d_data/lib/src/classes/matrix.dart diff --git a/packages/wolf_3d_data/lib/src/classes/sprite.dart b/packages/wolf_3d_data/lib/src/classes/sprite.dart new file mode 100644 index 0000000..bdc14aa --- /dev/null +++ b/packages/wolf_3d_data/lib/src/classes/sprite.dart @@ -0,0 +1,3 @@ +import 'matrix.dart'; + +typedef Sprite = Matrix; diff --git a/lib/vswap_parser.dart b/packages/wolf_3d_data/lib/src/vswap_parser.dart similarity index 93% rename from lib/vswap_parser.dart rename to packages/wolf_3d_data/lib/src/vswap_parser.dart index 3805d26..c0b5156 100644 --- a/lib/vswap_parser.dart +++ b/packages/wolf_3d_data/lib/src/vswap_parser.dart @@ -1,11 +1,10 @@ import 'dart:typed_data'; -import 'package:wolf_dart/classes/matrix.dart'; -import 'package:wolf_dart/classes/sprite.dart'; +import 'classes/sprite.dart'; class VswapParser { /// Extracts the 64x64 wall textures from VSWAP.WL1 - static List> parseWalls(ByteData vswap) { + static List parseWalls(ByteData vswap) { // 1. Read Header int chunks = vswap.getUint16(0, Endian.little); int spriteStart = vswap.getUint16(2, Endian.little); @@ -42,7 +41,7 @@ class VswapParser { } /// Extracts the compiled scaled sprites from VSWAP.WL1 - static List> parseSprites(ByteData vswap) { + static List parseSprites(ByteData vswap) { int chunks = vswap.getUint16(0, Endian.little); int spriteStart = vswap.getUint16(2, Endian.little); int soundStart = vswap.getUint16(4, Endian.little); @@ -52,7 +51,7 @@ class VswapParser { offsets.add(vswap.getUint32(6 + (i * 4), Endian.little)); } - List> sprites = []; + List sprites = []; // Sprites are located between the walls and the sounds for (int i = spriteStart; i < soundStart; i++) { @@ -60,7 +59,7 @@ class VswapParser { if (offset == 0) continue; // Some chunks are empty placeholders // Initialize the 64x64 grid with 255 (The Magenta Transparency Color!) - Matrix sprite = List.generate(64, (_) => List.filled(64, 255)); + Sprite sprite = List.generate(64, (_) => List.filled(64, 255)); int leftPix = vswap.getUint16(offset, Endian.little); int rightPix = vswap.getUint16(offset + 2, Endian.little); diff --git a/packages/wolf_3d_data/lib/wolf_3d_data.dart b/packages/wolf_3d_data/lib/wolf_3d_data.dart new file mode 100644 index 0000000..1141d5f --- /dev/null +++ b/packages/wolf_3d_data/lib/wolf_3d_data.dart @@ -0,0 +1,8 @@ +/// Support for doing something awesome. +/// +/// More dartdocs go here. +library; + +export 'src/classes/level.dart' show Level; +export 'src/classes/sprite.dart' show Sprite; +export 'src/vswap_parser.dart' show VswapParser; diff --git a/packages/wolf_3d_data/pubspec.yaml b/packages/wolf_3d_data/pubspec.yaml new file mode 100644 index 0000000..e6e4cf6 --- /dev/null +++ b/packages/wolf_3d_data/pubspec.yaml @@ -0,0 +1,13 @@ +name: wolf_3d_data +description: A starting point for Dart libraries or applications. +version: 1.0.0 +# repository: https://github.com/my_org/my_repo + +environment: + sdk: ^3.11.1 + +resolution: workspace + +dev_dependencies: + lints: ^6.0.0 + test: ^1.25.6 diff --git a/pubspec.yaml b/pubspec.yaml index 868b15c..f61a7e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,6 +7,7 @@ environment: sdk: ^3.11.1 dependencies: + wolf_3d_data: any flutter: sdk: flutter @@ -19,3 +20,6 @@ flutter: uses-material-design: true assets: - assets/ + +workspace: + - packages/wolf_3d_data