From c37b7cf7ff2267299e20dc8de082d0571abf4952 Mon Sep 17 00:00:00 2001 From: benni-tec Date: Tue, 24 Oct 2023 23:55:08 +0200 Subject: [PATCH 1/7] removed need for flutter sdk (dart:ui) --> replaced dart:ui Color with color_model package --> custom Rect instead of dart:ui --> replaced flutter_test with test package --- packages/tiled/lib/src/common/color.dart | 9 +++++++++ packages/tiled/lib/src/common/property.dart | 4 ++-- packages/tiled/lib/src/common/rect.dart | 17 +++++++++++++++++ packages/tiled/lib/src/layer.dart | 8 ++++---- packages/tiled/lib/src/parser.dart | 4 ++-- packages/tiled/lib/src/tiled_map.dart | 2 +- packages/tiled/lib/tiled.dart | 4 +++- packages/tiled/pubspec.yaml | 7 ++----- .../tiled/test/complexmap_infinite_test.dart | 2 +- packages/tiled/test/image_layer_test.dart | 2 +- .../tiled/test/isometric_staggered_test.dart | 2 +- packages/tiled/test/isometric_test.dart | 2 +- packages/tiled/test/layer_test.dart | 4 ++-- packages/tiled/test/map_test.dart | 2 +- packages/tiled/test/object_group_test.dart | 4 ++-- packages/tiled/test/overflow_bug_test.dart | 2 +- packages/tiled/test/parser_compare_test.dart | 2 +- packages/tiled/test/parser_test.dart | 8 ++++---- packages/tiled/test/rectangle_map_test.dart | 2 +- packages/tiled/test/tile_test.dart | 16 ++++++++-------- packages/tiled/test/tileset_test.dart | 2 +- packages/tiled/test/tmx_object_test.dart | 2 +- 22 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 packages/tiled/lib/src/common/color.dart create mode 100644 packages/tiled/lib/src/common/rect.dart diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart new file mode 100644 index 0000000..913f101 --- /dev/null +++ b/packages/tiled/lib/src/common/color.dart @@ -0,0 +1,9 @@ +import 'package:color_models/color_models.dart'; + +const _mask = 0xff; +int _sub(int hex, int index) => (hex & (_mask << index * 8)) >> index * 8; + +class Color extends RgbColor { + /// Format: aarrggbb + Color(int hex) : super(_sub(hex, 2), _sub(hex, 1), _sub(hex, 0), _sub(hex, 3)); +} diff --git a/packages/tiled/lib/src/common/property.dart b/packages/tiled/lib/src/common/property.dart index b52e9ac..840fb8e 100644 --- a/packages/tiled/lib/src/common/property.dart +++ b/packages/tiled/lib/src/common/property.dart @@ -37,7 +37,7 @@ class Property { case PropertyType.color: return ColorProperty( name: name, - value: parser.getColor('value', defaults: const Color(0x00000000)), + value: parser.getColor('value', defaults: Color(0x00000000)), hexValue: parser.getString('value', defaults: '#00000000'), ); @@ -156,7 +156,7 @@ class ObjectProperty extends Property { } /// [value] is the color -class ColorProperty extends Property { +class ColorProperty extends Property { final String hexValue; ColorProperty({ diff --git a/packages/tiled/lib/src/common/rect.dart b/packages/tiled/lib/src/common/rect.dart new file mode 100644 index 0000000..f42b620 --- /dev/null +++ b/packages/tiled/lib/src/common/rect.dart @@ -0,0 +1,17 @@ +class Rect { + final double x; + final double y; + final double width; + final double height; + + Rect.fromLTWH(this.x, this.y, this.width, this.height); + + @override + bool operator ==(Object other) { + if (other is! Rect) return false; + return x == other.x && y == other.y && width == other.width && height == other.height; + } + + @override + int get hashCode => Object.hash(x, y, width, height); +} \ No newline at end of file diff --git a/packages/tiled/lib/src/layer.dart b/packages/tiled/lib/src/layer.dart index ccff08d..c5a14d3 100644 --- a/packages/tiled/lib/src/layer.dart +++ b/packages/tiled/lib/src/layer.dart @@ -81,7 +81,7 @@ abstract class Layer { /// child layers (optional). /// /// Parsed from [tintColorHex], will be null if parsing fails for any reason. - Color? tintColor; + ColorModel? tintColor; /// The opacity of the layer as a value from 0 to 1. Defaults to 1. double opacity; @@ -420,7 +420,7 @@ class TileLayer extends Layer { } class ObjectGroup extends Layer { - static const defaultColor = Color.fromARGB(255, 160, 160, 164); + static const defaultColor = RgbColor(160, 160, 164, 255); static const defaultColorHex = '%a0a0a4'; /// topdown (default) or index (indexOrder). @@ -438,7 +438,7 @@ class ObjectGroup extends Layer { /// /// Parsed from [colorHex], will be fallback to [defaultColor] if parsing /// fails for any reason. - Color color; + ColorModel color; ObjectGroup({ super.id, @@ -478,7 +478,7 @@ class ImageLayer extends Layer { /// /// Parsed from [transparentColorHex], will be null if parsing fails for any /// reason. - Color? transparentColor; + ColorModel? transparentColor; /// Whether or not to repeat the image on the X-axis bool repeatX; diff --git a/packages/tiled/lib/src/parser.dart b/packages/tiled/lib/src/parser.dart index 3cd278a..f6416cd 100644 --- a/packages/tiled/lib/src/parser.dart +++ b/packages/tiled/lib/src/parser.dart @@ -197,7 +197,7 @@ abstract class Parser { return result; } - Color? getColorOrNull(String name, {Color? defaults}) { + ColorModel? getColorOrNull(String name, {ColorModel? defaults}) { final tiledColor = getStringOrNull(name); // Tiled colors are stored as either ARGB or RGB hex values, so we can @@ -218,7 +218,7 @@ abstract class Parser { } } - Color getColor(String name, {Color? defaults}) { + ColorModel getColor(String name, {ColorModel? defaults}) { final result = getColorOrNull(name, defaults: defaults); if (result == null) { throw ParsingException(name, null, 'Missing required color field'); diff --git a/packages/tiled/lib/src/tiled_map.dart b/packages/tiled/lib/src/tiled_map.dart index f976762..8576d1b 100644 --- a/packages/tiled/lib/src/tiled_map.dart +++ b/packages/tiled/lib/src/tiled_map.dart @@ -79,7 +79,7 @@ class TiledMap { /// /// Parsed from [backgroundColorHex], will be null if parsing fails for any /// reason. - Color? backgroundColor; + ColorModel? backgroundColor; int compressionLevel; diff --git a/packages/tiled/lib/tiled.dart b/packages/tiled/lib/tiled.dart index 4907cc5..ffe3c0c 100644 --- a/packages/tiled/lib/tiled.dart +++ b/packages/tiled/lib/tiled.dart @@ -4,11 +4,13 @@ import 'dart:collection'; import 'dart:convert'; import 'dart:math' show Rectangle; import 'dart:typed_data'; -import 'dart:ui'; import 'package:archive/archive.dart'; import 'package:collection/collection.dart'; +import 'package:color_models/color_models.dart'; import 'package:meta/meta.dart'; +import 'package:tiled/src/common/color.dart'; +import 'package:tiled/src/common/rect.dart'; import 'package:xml/xml.dart'; part 'src/chunk.dart'; diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index ca1c5c8..5fa1ce0 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -8,13 +8,10 @@ environment: dependencies: archive: ^3.3.0 collection: ^1.16.0 - flutter: - sdk: flutter meta: ^1.7.0 xml: ^6.1.0 + color_models: ^1.3.3 dev_dependencies: dartdoc: ^6.0.1 - flame_lint: ^0.2.0 - flutter_test: - sdk: flutter + test: ^1.24.8 diff --git a/packages/tiled/test/complexmap_infinite_test.dart b/packages/tiled/test/complexmap_infinite_test.dart index 5ab581c..ca5bf49 100644 --- a/packages/tiled/test/complexmap_infinite_test.dart +++ b/packages/tiled/test/complexmap_infinite_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/image_layer_test.dart b/packages/tiled/test/image_layer_test.dart index da3a9c6..3b52721 100644 --- a/packages/tiled/test/image_layer_test.dart +++ b/packages/tiled/test/image_layer_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; import 'package:tiled/tiled.dart'; +import 'package:test/test.dart'; void main() { late TiledMap map; diff --git a/packages/tiled/test/isometric_staggered_test.dart b/packages/tiled/test/isometric_staggered_test.dart index 00e9e33..4e13832 100644 --- a/packages/tiled/test/isometric_staggered_test.dart +++ b/packages/tiled/test/isometric_staggered_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/isometric_test.dart b/packages/tiled/test/isometric_test.dart index 66c61bc..9c28c6a 100644 --- a/packages/tiled/test/isometric_test.dart +++ b/packages/tiled/test/isometric_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/layer_test.dart b/packages/tiled/test/layer_test.dart index 984b46f..974c31b 100644 --- a/packages/tiled/test/layer_test.dart +++ b/packages/tiled/test/layer_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; +import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/map_test.dart b/packages/tiled/test/map_test.dart index fd86eed..2288cc5 100644 --- a/packages/tiled/test/map_test.dart +++ b/packages/tiled/test/map_test.dart @@ -1,4 +1,4 @@ -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/object_group_test.dart b/packages/tiled/test/object_group_test.dart index d0692cf..eeccc8f 100644 --- a/packages/tiled/test/object_group_test.dart +++ b/packages/tiled/test/object_group_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; +import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/overflow_bug_test.dart b/packages/tiled/test/overflow_bug_test.dart index 481c888..27e62b7 100644 --- a/packages/tiled/test/overflow_bug_test.dart +++ b/packages/tiled/test/overflow_bug_test.dart @@ -2,7 +2,7 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/parser_compare_test.dart b/packages/tiled/test/parser_compare_test.dart index ab052d0..4e8b421 100644 --- a/packages/tiled/test/parser_compare_test.dart +++ b/packages/tiled/test/parser_compare_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/parser_test.dart b/packages/tiled/test/parser_test.dart index 519d5b7..4c0bcb9 100644 --- a/packages/tiled/test/parser_test.dart +++ b/packages/tiled/test/parser_test.dart @@ -1,8 +1,8 @@ import 'dart:io'; import 'dart:math' show Rectangle; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; +import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; import 'package:xml/xml.dart'; @@ -89,7 +89,7 @@ void main() { ); expect( properties.getValue('multiline string'), - equals('Hello,\nWorld'), + equals('Hello,\r\nWorld'), ); expect( properties.getValue('integer property'), @@ -101,7 +101,7 @@ void main() { ); expect( properties.getValue('color property'), - equals(const Color(0x00112233)), + equals(Color(0x00112233)), ); expect( properties.getValue('float property'), diff --git a/packages/tiled/test/rectangle_map_test.dart b/packages/tiled/test/rectangle_map_test.dart index 7e70418..797bb5b 100644 --- a/packages/tiled/test/rectangle_map_test.dart +++ b/packages/tiled/test/rectangle_map_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/tile_test.dart b/packages/tiled/test/tile_test.dart index db85d8e..076a0db 100644 --- a/packages/tiled/test/tile_test.dart +++ b/packages/tiled/test/tile_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; +import 'package:tiled/src/common/rect.dart'; import 'package:tiled/tiled.dart'; import 'package:xml/xml.dart'; @@ -58,8 +58,8 @@ void main() { final tile1 = tileset1.tiles.firstWhere((t) => t.localId == 0); final tile2 = tileset1.tiles.firstWhere((t) => t.localId == 1); - expect(tile1.imageRect, const Rect.fromLTWH(64, 96, 32, 32)); - expect(tile2.imageRect, const Rect.fromLTWH(0, 0, 20, 20)); + expect(tile1.imageRect, Rect.fromLTWH(64, 96, 32, 32)); + expect(tile2.imageRect, Rect.fromLTWH(0, 0, 20, 20)); }); test( @@ -70,10 +70,10 @@ void main() { final tile3 = tileset2.tiles.firstWhere((t) => t.localId == 129); final tile4 = tileset2.tiles.firstWhere((t) => t.localId == 11); - expect(tile1.imageRect, const Rect.fromLTWH(112, 48, 16, 16)); - expect(tile2.imageRect, const Rect.fromLTWH(64, 96, 16, 16)); - expect(tile3.imageRect, const Rect.fromLTWH(160, 112, 16, 16)); - expect(tile4.imageRect, const Rect.fromLTWH(176, 0, 16, 16)); + expect(tile1.imageRect, Rect.fromLTWH(112, 48, 16, 16)); + expect(tile2.imageRect, Rect.fromLTWH(64, 96, 16, 16)); + expect(tile3.imageRect, Rect.fromLTWH(160, 112, 16, 16)); + expect(tile4.imageRect, Rect.fromLTWH(176, 0, 16, 16)); }, ); }, diff --git a/packages/tiled/test/tileset_test.dart b/packages/tiled/test/tileset_test.dart index 756709b..d5bed4e 100644 --- a/packages/tiled/test/tileset_test.dart +++ b/packages/tiled/test/tileset_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; import 'package:xml/xml.dart'; diff --git a/packages/tiled/test/tmx_object_test.dart b/packages/tiled/test/tmx_object_test.dart index f58d90a..8579ed6 100644 --- a/packages/tiled/test/tmx_object_test.dart +++ b/packages/tiled/test/tmx_object_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; +import 'package:test/test.dart'; import 'package:tiled/tiled.dart'; void main() { From e389a087a020af0c6da7f737daf3caf7b07edf29 Mon Sep 17 00:00:00 2001 From: benni-tec Date: Sat, 28 Oct 2023 15:58:15 +0200 Subject: [PATCH 2/7] replaced custom rect in favor of Rectangle from dart:math --- packages/tiled/lib/src/common/color.dart | 2 +- packages/tiled/lib/src/common/rect.dart | 17 ----------------- packages/tiled/lib/src/tileset/tile.dart | 4 ++-- packages/tiled/lib/src/tileset/tileset.dart | 4 ++-- packages/tiled/lib/tiled.dart | 3 +-- packages/tiled/pubspec.yaml | 2 +- packages/tiled/test/layer_test.dart | 1 - packages/tiled/test/object_group_test.dart | 1 - packages/tiled/test/parser_test.dart | 1 - packages/tiled/test/tile_test.dart | 14 +++++++------- 10 files changed, 14 insertions(+), 35 deletions(-) delete mode 100644 packages/tiled/lib/src/common/rect.dart diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart index 913f101..9911ac7 100644 --- a/packages/tiled/lib/src/common/color.dart +++ b/packages/tiled/lib/src/common/color.dart @@ -1,4 +1,4 @@ -import 'package:color_models/color_models.dart'; +part of tiled; const _mask = 0xff; int _sub(int hex, int index) => (hex & (_mask << index * 8)) >> index * 8; diff --git a/packages/tiled/lib/src/common/rect.dart b/packages/tiled/lib/src/common/rect.dart deleted file mode 100644 index f42b620..0000000 --- a/packages/tiled/lib/src/common/rect.dart +++ /dev/null @@ -1,17 +0,0 @@ -class Rect { - final double x; - final double y; - final double width; - final double height; - - Rect.fromLTWH(this.x, this.y, this.width, this.height); - - @override - bool operator ==(Object other) { - if (other is! Rect) return false; - return x == other.x && y == other.y && width == other.width && height == other.height; - } - - @override - int get hashCode => Object.hash(x, y, width, height); -} \ No newline at end of file diff --git a/packages/tiled/lib/src/tileset/tile.dart b/packages/tiled/lib/src/tileset/tile.dart index c2c1c74..a10a2e3 100644 --- a/packages/tiled/lib/src/tileset/tile.dart +++ b/packages/tiled/lib/src/tileset/tile.dart @@ -27,7 +27,7 @@ class Tile { List terrain; TiledImage? image; - Rect? imageRect; + Rectangle? imageRect; Layer? objectGroup; List animation; CustomProperties properties; @@ -66,7 +66,7 @@ class Tile { .toList() ?? [], image: parser.getSingleChildOrNullAs('image', TiledImage.parse), - imageRect: Rect.fromLTWH( + imageRect: Rectangle( parser.getDoubleOrNull('x') ?? 0, parser.getDoubleOrNull('y') ?? 0, parser.getDoubleOrNull('width') ?? 0, diff --git a/packages/tiled/lib/src/tileset/tileset.dart b/packages/tiled/lib/src/tileset/tileset.dart index b26584e..49d64f3 100644 --- a/packages/tiled/lib/src/tileset/tileset.dart +++ b/packages/tiled/lib/src/tileset/tileset.dart @@ -230,7 +230,7 @@ class Tileset { final tiles = []; for (var i = 0; i < tileCount; ++i) { - Rect? imageRect; + Rectangle? imageRect; if (columns != null && columns != 0 && @@ -239,7 +239,7 @@ class Tileset { final x = (i % columns) * tileWidth; final y = i ~/ columns * tileHeight; - imageRect = Rect.fromLTWH( + imageRect = Rectangle( x.toDouble(), y.toDouble(), tileWidth.toDouble(), diff --git a/packages/tiled/lib/tiled.dart b/packages/tiled/lib/tiled.dart index ffe3c0c..5d33d4a 100644 --- a/packages/tiled/lib/tiled.dart +++ b/packages/tiled/lib/tiled.dart @@ -9,8 +9,6 @@ import 'package:archive/archive.dart'; import 'package:collection/collection.dart'; import 'package:color_models/color_models.dart'; import 'package:meta/meta.dart'; -import 'package:tiled/src/common/color.dart'; -import 'package:tiled/src/common/rect.dart'; import 'package:xml/xml.dart'; part 'src/chunk.dart'; @@ -21,6 +19,7 @@ part 'src/common/gid.dart'; part 'src/common/point.dart'; part 'src/common/property.dart'; part 'src/common/tiled_image.dart'; +part 'src/common/color.dart'; part 'src/editor_setting/chunk_size.dart'; part 'src/editor_setting/editor_setting.dart'; part 'src/editor_setting/export.dart'; diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index 5fa1ce0..280a58f 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -1,5 +1,5 @@ name: tiled -version: 0.10.1 +version: 0.11.0 description: A Dart Tiled library. Parse your TMX files into useful representations. Compatible with Flame. homepage: https://github.com/flame-engine/tiled.dart diff --git a/packages/tiled/test/layer_test.dart b/packages/tiled/test/layer_test.dart index 974c31b..73a7ae5 100644 --- a/packages/tiled/test/layer_test.dart +++ b/packages/tiled/test/layer_test.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:test/test.dart'; -import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/object_group_test.dart b/packages/tiled/test/object_group_test.dart index eeccc8f..8acd54a 100644 --- a/packages/tiled/test/object_group_test.dart +++ b/packages/tiled/test/object_group_test.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:test/test.dart'; -import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; void main() { diff --git a/packages/tiled/test/parser_test.dart b/packages/tiled/test/parser_test.dart index 4c0bcb9..bf7ebd4 100644 --- a/packages/tiled/test/parser_test.dart +++ b/packages/tiled/test/parser_test.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'dart:math' show Rectangle; import 'package:test/test.dart'; -import 'package:tiled/src/common/color.dart'; import 'package:tiled/tiled.dart'; import 'package:xml/xml.dart'; diff --git a/packages/tiled/test/tile_test.dart b/packages/tiled/test/tile_test.dart index 076a0db..c75ae19 100644 --- a/packages/tiled/test/tile_test.dart +++ b/packages/tiled/test/tile_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; +import 'dart:math'; import 'package:test/test.dart'; -import 'package:tiled/src/common/rect.dart'; import 'package:tiled/tiled.dart'; import 'package:xml/xml.dart'; @@ -58,8 +58,8 @@ void main() { final tile1 = tileset1.tiles.firstWhere((t) => t.localId == 0); final tile2 = tileset1.tiles.firstWhere((t) => t.localId == 1); - expect(tile1.imageRect, Rect.fromLTWH(64, 96, 32, 32)); - expect(tile2.imageRect, Rect.fromLTWH(0, 0, 20, 20)); + expect(tile1.imageRect, Rectangle(64, 96, 32, 32)); + expect(tile2.imageRect, Rectangle(0, 0, 20, 20)); }); test( @@ -70,10 +70,10 @@ void main() { final tile3 = tileset2.tiles.firstWhere((t) => t.localId == 129); final tile4 = tileset2.tiles.firstWhere((t) => t.localId == 11); - expect(tile1.imageRect, Rect.fromLTWH(112, 48, 16, 16)); - expect(tile2.imageRect, Rect.fromLTWH(64, 96, 16, 16)); - expect(tile3.imageRect, Rect.fromLTWH(160, 112, 16, 16)); - expect(tile4.imageRect, Rect.fromLTWH(176, 0, 16, 16)); + expect(tile1.imageRect, Rectangle(112, 48, 16, 16)); + expect(tile2.imageRect, Rectangle(64, 96, 16, 16)); + expect(tile3.imageRect, Rectangle(160, 112, 16, 16)); + expect(tile4.imageRect, Rectangle(176, 0, 16, 16)); }, ); }, From 8f38c1c93050cfb750e3a51d7cf99732859c80dc Mon Sep 17 00:00:00 2001 From: benni-tec Date: Sun, 29 Oct 2023 16:28:43 +0100 Subject: [PATCH 3/7] removed color_models dependency in favor of a basic data class in color.dart --- packages/tiled/lib/src/common/color.dart | 26 ++++++++++++++++++--- packages/tiled/lib/src/common/property.dart | 4 ++-- packages/tiled/lib/src/layer.dart | 8 +++---- packages/tiled/lib/src/parser.dart | 6 ++--- packages/tiled/lib/src/tiled_map.dart | 2 +- packages/tiled/lib/tiled.dart | 1 - packages/tiled/pubspec.yaml | 1 - packages/tiled/test/layer_test.dart | 2 +- packages/tiled/test/object_group_test.dart | 2 +- packages/tiled/test/parser_test.dart | 4 ++-- 10 files changed, 37 insertions(+), 19 deletions(-) diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart index 9911ac7..f1e077c 100644 --- a/packages/tiled/lib/src/common/color.dart +++ b/packages/tiled/lib/src/common/color.dart @@ -1,9 +1,29 @@ part of tiled; const _mask = 0xff; -int _sub(int hex, int index) => (hex & (_mask << index * 8)) >> index * 8; -class Color extends RgbColor { +int _sub(int hex, int index) { + final value = (hex & (_mask << index * 8)) >> index * 8; + assert(value >= 0 && value < 256); + return value; +} + +class Color { + final int red; + final int green; + final int blue; + final int alpha; + /// Format: aarrggbb - Color(int hex) : super(_sub(hex, 2), _sub(hex, 1), _sub(hex, 0), _sub(hex, 3)); + Color.hex(int hex) + : alpha = _sub(hex, 3), + red = _sub(hex, 2), + green = _sub(hex, 1), + blue = _sub(hex, 0); + + const Color.rgb(this.red, this.green, this.blue, [this.alpha = 255]) + : assert(red >= 0 && red <= 255), + assert(green >= 0 && green <= 255), + assert(blue >= 0 && blue <= 255), + assert(alpha >= 0 && alpha <= 255); } diff --git a/packages/tiled/lib/src/common/property.dart b/packages/tiled/lib/src/common/property.dart index 840fb8e..5fadae3 100644 --- a/packages/tiled/lib/src/common/property.dart +++ b/packages/tiled/lib/src/common/property.dart @@ -37,7 +37,7 @@ class Property { case PropertyType.color: return ColorProperty( name: name, - value: parser.getColor('value', defaults: Color(0x00000000)), + value: parser.getColor('value', defaults: Color.hex(0x00000000)), hexValue: parser.getString('value', defaults: '#00000000'), ); @@ -156,7 +156,7 @@ class ObjectProperty extends Property { } /// [value] is the color -class ColorProperty extends Property { +class ColorProperty extends Property { final String hexValue; ColorProperty({ diff --git a/packages/tiled/lib/src/layer.dart b/packages/tiled/lib/src/layer.dart index c5a14d3..9e4b683 100644 --- a/packages/tiled/lib/src/layer.dart +++ b/packages/tiled/lib/src/layer.dart @@ -81,7 +81,7 @@ abstract class Layer { /// child layers (optional). /// /// Parsed from [tintColorHex], will be null if parsing fails for any reason. - ColorModel? tintColor; + Color? tintColor; /// The opacity of the layer as a value from 0 to 1. Defaults to 1. double opacity; @@ -420,7 +420,7 @@ class TileLayer extends Layer { } class ObjectGroup extends Layer { - static const defaultColor = RgbColor(160, 160, 164, 255); + static const defaultColor = Color.rgb(160, 160, 164, 255); static const defaultColorHex = '%a0a0a4'; /// topdown (default) or index (indexOrder). @@ -438,7 +438,7 @@ class ObjectGroup extends Layer { /// /// Parsed from [colorHex], will be fallback to [defaultColor] if parsing /// fails for any reason. - ColorModel color; + Color color; ObjectGroup({ super.id, @@ -478,7 +478,7 @@ class ImageLayer extends Layer { /// /// Parsed from [transparentColorHex], will be null if parsing fails for any /// reason. - ColorModel? transparentColor; + Color? transparentColor; /// Whether or not to repeat the image on the X-axis bool repeatX; diff --git a/packages/tiled/lib/src/parser.dart b/packages/tiled/lib/src/parser.dart index f6416cd..2fe6201 100644 --- a/packages/tiled/lib/src/parser.dart +++ b/packages/tiled/lib/src/parser.dart @@ -197,7 +197,7 @@ abstract class Parser { return result; } - ColorModel? getColorOrNull(String name, {ColorModel? defaults}) { + Color? getColorOrNull(String name, {Color? defaults}) { final tiledColor = getStringOrNull(name); // Tiled colors are stored as either ARGB or RGB hex values, so we can @@ -212,13 +212,13 @@ abstract class Parser { } if (colorValue != null) { - return Color(colorValue); + return Color.hex(colorValue); } else { return defaults; } } - ColorModel getColor(String name, {ColorModel? defaults}) { + Color getColor(String name, {Color? defaults}) { final result = getColorOrNull(name, defaults: defaults); if (result == null) { throw ParsingException(name, null, 'Missing required color field'); diff --git a/packages/tiled/lib/src/tiled_map.dart b/packages/tiled/lib/src/tiled_map.dart index 8576d1b..f976762 100644 --- a/packages/tiled/lib/src/tiled_map.dart +++ b/packages/tiled/lib/src/tiled_map.dart @@ -79,7 +79,7 @@ class TiledMap { /// /// Parsed from [backgroundColorHex], will be null if parsing fails for any /// reason. - ColorModel? backgroundColor; + Color? backgroundColor; int compressionLevel; diff --git a/packages/tiled/lib/tiled.dart b/packages/tiled/lib/tiled.dart index 5d33d4a..c658c47 100644 --- a/packages/tiled/lib/tiled.dart +++ b/packages/tiled/lib/tiled.dart @@ -7,7 +7,6 @@ import 'dart:typed_data'; import 'package:archive/archive.dart'; import 'package:collection/collection.dart'; -import 'package:color_models/color_models.dart'; import 'package:meta/meta.dart'; import 'package:xml/xml.dart'; diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index 280a58f..636356b 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -10,7 +10,6 @@ dependencies: collection: ^1.16.0 meta: ^1.7.0 xml: ^6.1.0 - color_models: ^1.3.3 dev_dependencies: dartdoc: ^6.0.1 diff --git a/packages/tiled/test/layer_test.dart b/packages/tiled/test/layer_test.dart index 73a7ae5..ff200b1 100644 --- a/packages/tiled/test/layer_test.dart +++ b/packages/tiled/test/layer_test.dart @@ -74,7 +74,7 @@ void main() { expect(layer.tintColorHex, equals('#ffaabb')); expect( layer.tintColor, - equals(Color(int.parse('0xffffaabb'))), + equals(Color.hex(int.parse('0xffffaabb'))), ); }); }); diff --git a/packages/tiled/test/object_group_test.dart b/packages/tiled/test/object_group_test.dart index 8acd54a..98d5ac0 100644 --- a/packages/tiled/test/object_group_test.dart +++ b/packages/tiled/test/object_group_test.dart @@ -30,7 +30,7 @@ void main() { expect(objectGroup.colorHex, equals('#555500')); expect( objectGroup.color, - equals(Color(int.parse('0xff555500'))), + equals(Color.hex(int.parse('0xff555500'))), ); }); diff --git a/packages/tiled/test/parser_test.dart b/packages/tiled/test/parser_test.dart index bf7ebd4..2e05c24 100644 --- a/packages/tiled/test/parser_test.dart +++ b/packages/tiled/test/parser_test.dart @@ -43,7 +43,7 @@ void main() { expect(map.backgroundColorHex, equals('#ccddaaff')); expect( map.backgroundColor, - equals(Color(int.parse('0xccddaaff'))), + equals(Color.hex(int.parse('0xccddaaff'))), ); }); @@ -100,7 +100,7 @@ void main() { ); expect( properties.getValue('color property'), - equals(Color(0x00112233)), + equals(Color.hex(0x00112233)), ); expect( properties.getValue('float property'), From f6978009ce53532a8ad30990a144a3e26dd3de85 Mon Sep 17 00:00:00 2001 From: benni-tec Date: Tue, 16 Jan 2024 19:42:56 +0100 Subject: [PATCH 4/7] renamed Color to ColorData to make conversion easier in flame_tiled // added tests for hex decoding in ColorData --- packages/tiled/lib/src/common/color.dart | 14 ++++-------- packages/tiled/lib/src/common/property.dart | 4 ++-- packages/tiled/lib/src/layer.dart | 14 ++++++------ packages/tiled/lib/src/parser.dart | 6 ++--- packages/tiled/lib/src/tiled_map.dart | 4 ++-- packages/tiled/test/color.dart | 25 +++++++++++++++++++++ packages/tiled/test/layer_test.dart | 2 +- packages/tiled/test/object_group_test.dart | 2 +- packages/tiled/test/parser_test.dart | 6 ++--- 9 files changed, 48 insertions(+), 29 deletions(-) create mode 100644 packages/tiled/test/color.dart diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart index f1e077c..f5cda41 100644 --- a/packages/tiled/lib/src/common/color.dart +++ b/packages/tiled/lib/src/common/color.dart @@ -1,27 +1,21 @@ part of tiled; -const _mask = 0xff; +class ColorData { + static int _sub(int hex, int index) => (hex >> index * 8) & 0x000000ff; -int _sub(int hex, int index) { - final value = (hex & (_mask << index * 8)) >> index * 8; - assert(value >= 0 && value < 256); - return value; -} - -class Color { final int red; final int green; final int blue; final int alpha; /// Format: aarrggbb - Color.hex(int hex) + ColorData.hex(int hex) : alpha = _sub(hex, 3), red = _sub(hex, 2), green = _sub(hex, 1), blue = _sub(hex, 0); - const Color.rgb(this.red, this.green, this.blue, [this.alpha = 255]) + const ColorData.rgb(this.red, this.green, this.blue, [this.alpha = 255]) : assert(red >= 0 && red <= 255), assert(green >= 0 && green <= 255), assert(blue >= 0 && blue <= 255), diff --git a/packages/tiled/lib/src/common/property.dart b/packages/tiled/lib/src/common/property.dart index 5fadae3..b14e03d 100644 --- a/packages/tiled/lib/src/common/property.dart +++ b/packages/tiled/lib/src/common/property.dart @@ -37,7 +37,7 @@ class Property { case PropertyType.color: return ColorProperty( name: name, - value: parser.getColor('value', defaults: Color.hex(0x00000000)), + value: parser.getColor('value', defaults: ColorData.hex(0x00000000)), hexValue: parser.getString('value', defaults: '#00000000'), ); @@ -156,7 +156,7 @@ class ObjectProperty extends Property { } /// [value] is the color -class ColorProperty extends Property { +class ColorProperty extends Property { final String hexValue; ColorProperty({ diff --git a/packages/tiled/lib/src/layer.dart b/packages/tiled/lib/src/layer.dart index 9e4b683..1169251 100644 --- a/packages/tiled/lib/src/layer.dart +++ b/packages/tiled/lib/src/layer.dart @@ -77,11 +77,11 @@ abstract class Layer { /// any graphics drawn by this layer or any child layers (optional). String? tintColorHex; - /// [Color] that is multiplied with any graphics drawn by this layer or any + /// [ColorData] that is multiplied with any graphics drawn by this layer or any /// child layers (optional). /// /// Parsed from [tintColorHex], will be null if parsing fails for any reason. - Color? tintColor; + ColorData? tintColor; /// The opacity of the layer as a value from 0 to 1. Defaults to 1. double opacity; @@ -420,7 +420,7 @@ class TileLayer extends Layer { } class ObjectGroup extends Layer { - static const defaultColor = Color.rgb(160, 160, 164, 255); + static const defaultColor = ColorData.rgb(160, 160, 164, 255); static const defaultColorHex = '%a0a0a4'; /// topdown (default) or index (indexOrder). @@ -433,12 +433,12 @@ class ObjectGroup extends Layer { /// this group. (defaults to gray (“#a0a0a4”)) String colorHex; - /// [Color] used to display the objects in this group. + /// [ColorData] used to display the objects in this group. /// (defaults to gray (“#a0a0a4”)) /// /// Parsed from [colorHex], will be fallback to [defaultColor] if parsing /// fails for any reason. - Color color; + ColorData color; ObjectGroup({ super.id, @@ -474,11 +474,11 @@ class ImageLayer extends Layer { /// (optional). String? transparentColorHex; - /// [Color] to be rendered as transparent (optional). + /// [ColorData] to be rendered as transparent (optional). /// /// Parsed from [transparentColorHex], will be null if parsing fails for any /// reason. - Color? transparentColor; + ColorData? transparentColor; /// Whether or not to repeat the image on the X-axis bool repeatX; diff --git a/packages/tiled/lib/src/parser.dart b/packages/tiled/lib/src/parser.dart index 2fe6201..2bbafd5 100644 --- a/packages/tiled/lib/src/parser.dart +++ b/packages/tiled/lib/src/parser.dart @@ -197,7 +197,7 @@ abstract class Parser { return result; } - Color? getColorOrNull(String name, {Color? defaults}) { + ColorData? getColorOrNull(String name, {ColorData? defaults}) { final tiledColor = getStringOrNull(name); // Tiled colors are stored as either ARGB or RGB hex values, so we can @@ -212,13 +212,13 @@ abstract class Parser { } if (colorValue != null) { - return Color.hex(colorValue); + return ColorData.hex(colorValue); } else { return defaults; } } - Color getColor(String name, {Color? defaults}) { + ColorData getColor(String name, {ColorData? defaults}) { final result = getColorOrNull(name, defaults: defaults); if (result == null) { throw ParsingException(name, null, 'Missing required color field'); diff --git a/packages/tiled/lib/src/tiled_map.dart b/packages/tiled/lib/src/tiled_map.dart index f976762..19dbeac 100644 --- a/packages/tiled/lib/src/tiled_map.dart +++ b/packages/tiled/lib/src/tiled_map.dart @@ -74,12 +74,12 @@ class TiledMap { /// behind all other layers (optional). String? backgroundColorHex; - /// [Color] to be rendered as a solid color behind all other layers + /// [ColorData] to be rendered as a solid color behind all other layers /// (optional). /// /// Parsed from [backgroundColorHex], will be null if parsing fails for any /// reason. - Color? backgroundColor; + ColorData? backgroundColor; int compressionLevel; diff --git a/packages/tiled/test/color.dart b/packages/tiled/test/color.dart new file mode 100644 index 0000000..d7a87ca --- /dev/null +++ b/packages/tiled/test/color.dart @@ -0,0 +1,25 @@ +import 'dart:math'; + +import 'package:test/expect.dart'; +import 'package:test/scaffolding.dart'; +import 'package:tiled/tiled.dart'; + +void main() { + group("ColorData.hex", () { + test("parse", () { + final random = Random(); + final red = random.nextInt(256); + final green = random.nextInt(256); + final blue = random.nextInt(256); + final alpha = random.nextInt(256); + + final hex = alpha << 24 | red << 16 | green << 8 | blue << 0; + final data = ColorData.hex(hex); + + expect(data.alpha, equals(alpha)); + expect(data.red, equals(red)); + expect(data.green, equals(green)); + expect(data.blue, equals(blue)); + }); + }); +} \ No newline at end of file diff --git a/packages/tiled/test/layer_test.dart b/packages/tiled/test/layer_test.dart index ff200b1..d967704 100644 --- a/packages/tiled/test/layer_test.dart +++ b/packages/tiled/test/layer_test.dart @@ -74,7 +74,7 @@ void main() { expect(layer.tintColorHex, equals('#ffaabb')); expect( layer.tintColor, - equals(Color.hex(int.parse('0xffffaabb'))), + equals(ColorData.hex(int.parse('0xffffaabb'))), ); }); }); diff --git a/packages/tiled/test/object_group_test.dart b/packages/tiled/test/object_group_test.dart index 98d5ac0..0287622 100644 --- a/packages/tiled/test/object_group_test.dart +++ b/packages/tiled/test/object_group_test.dart @@ -30,7 +30,7 @@ void main() { expect(objectGroup.colorHex, equals('#555500')); expect( objectGroup.color, - equals(Color.hex(int.parse('0xff555500'))), + equals(ColorData.hex(int.parse('0xff555500'))), ); }); diff --git a/packages/tiled/test/parser_test.dart b/packages/tiled/test/parser_test.dart index 2e05c24..442d783 100644 --- a/packages/tiled/test/parser_test.dart +++ b/packages/tiled/test/parser_test.dart @@ -43,7 +43,7 @@ void main() { expect(map.backgroundColorHex, equals('#ccddaaff')); expect( map.backgroundColor, - equals(Color.hex(int.parse('0xccddaaff'))), + equals(ColorData.hex(int.parse('0xccddaaff'))), ); }); @@ -99,8 +99,8 @@ void main() { equals('#00112233'), ); expect( - properties.getValue('color property'), - equals(Color.hex(0x00112233)), + properties.getValue('color property'), + equals(ColorData.hex(0x00112233)), ); expect( properties.getValue('float property'), From e104efdd2ea68560817a541087a4edf835aa6627 Mon Sep 17 00:00:00 2001 From: benni-tec Date: Tue, 16 Jan 2024 20:27:41 +0100 Subject: [PATCH 5/7] added dartdocs to color and tests --- packages/tiled/lib/src/common/color.dart | 4 +++- packages/tiled/test/color.dart | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart index f5cda41..135bf22 100644 --- a/packages/tiled/lib/src/common/color.dart +++ b/packages/tiled/lib/src/common/color.dart @@ -1,5 +1,7 @@ part of tiled; +/// Basic data class holding a Color in ARGB format. +/// This can be converted to dart:ui's Color using the flame_tiled package class ColorData { static int _sub(int hex, int index) => (hex >> index * 8) & 0x000000ff; @@ -8,7 +10,7 @@ class ColorData { final int blue; final int alpha; - /// Format: aarrggbb + /// Parses the Color from an int using the lower 32-bits and tiled's format: 0xaarrggbb ColorData.hex(int hex) : alpha = _sub(hex, 3), red = _sub(hex, 2), diff --git a/packages/tiled/test/color.dart b/packages/tiled/test/color.dart index d7a87ca..c39c834 100644 --- a/packages/tiled/test/color.dart +++ b/packages/tiled/test/color.dart @@ -22,4 +22,4 @@ void main() { expect(data.blue, equals(blue)); }); }); -} \ No newline at end of file +} From 6b60e922a807fd461ff1ac8ba0e1fff43b1b19bd Mon Sep 17 00:00:00 2001 From: benni-tec Date: Tue, 16 Jan 2024 20:32:20 +0100 Subject: [PATCH 6/7] added back flame_lint --- packages/tiled/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index 636356b..b61f9ab 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -13,4 +13,5 @@ dependencies: dev_dependencies: dartdoc: ^6.0.1 + flame_lint: ^1.1.1 test: ^1.24.8 From 6a8e362c2e1f67c4e9be6dc739236261936cfdd8 Mon Sep 17 00:00:00 2001 From: benni-tec Date: Wed, 17 Jan 2024 11:44:43 +0100 Subject: [PATCH 7/7] reversed version change (done automagically by melos) --- packages/tiled/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index b61f9ab..a84f600 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -1,5 +1,5 @@ name: tiled -version: 0.11.0 +version: 0.10.1 description: A Dart Tiled library. Parse your TMX files into useful representations. Compatible with Flame. homepage: https://github.com/flame-engine/tiled.dart