Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/flame_kenney_xml/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dependencies:
flame: ^1.38.0
flutter:
sdk: flutter
xml: ^6.5.0
xml: ">=6.5.0 <8.0.0"

dev_dependencies:
build_runner: ^2.4.11
Expand Down
26 changes: 12 additions & 14 deletions packages/flame_tiled/lib/src/flame_tsx_provider.dart
Original file line number Diff line number Diff line change
@@ -1,36 +1,34 @@
import 'package:flame/flame.dart';
import 'package:flutter/services.dart';
import 'package:tiled/tiled.dart';
import 'package:xml/xml.dart';

/// A implementation of [TsxProvider] use by RenderableTileMap.
/// A [ParserProvider] for a single external tileset file loaded from
/// [Flame.bundle] or a custom asset bundle.
///
/// It uses [Flame.bundle] or a custom asset bundle
/// and has a built-in cache for the file read.
class FlameTsxProvider implements TsxProvider {
/// `RenderableTiledMap` resolves external tilesets on its own, this is only
/// needed when parsing a map manually, for example through
/// [TiledMap.parseTmx].
class FlameTsxProvider implements ParserProvider {
/// Parsed data for this tsx file.
final String data;

/// Stored filename for corresponding tsx file.
final String _filename;
final String filename;

FlameTsxProvider._(this.data, this._filename);
FlameTsxProvider._(this.data, this.filename);

@override
String get filename => _filename;
bool canProvide(String path) => path == filename;

@override
Parser getSource(String key) {
final node = XmlDocument.parse(data).rootElement;
return XmlParser(node);
}
Parser getSource(String path) => Parser.fromString(data);

@override
/// Parsed tileset source, or `null` when [data] is empty.
Parser? getCachedSource() {
if (data.isEmpty) {
return null;
}
return getSource('');
return getSource(filename);
}

/// Parses a file returning a [FlameTsxProvider].
Expand Down
15 changes: 9 additions & 6 deletions packages/flame_tiled/lib/src/renderable_tile_map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:flame/extensions.dart';
import 'package:flame/flame.dart';
import 'package:flame/rendering.dart';
import 'package:flame_tiled/src/extensions.dart';
import 'package:flame_tiled/src/flame_tsx_provider.dart';
import 'package:flame_tiled/src/renderable_layers/group_layer.dart';
import 'package:flame_tiled/src/renderable_layers/renderable_layer.dart';
import 'package:flame_tiled/src/renderable_layers/tile_layers/tile_layer.dart';
Expand Down Expand Up @@ -252,8 +251,9 @@ class RenderableTiledMap {
///
/// {@template renderable_tile_map_path}
/// The [fileName] is the full path of the map, as declared in the
/// `pubspec.yaml`, for example `assets/tiles/map.tmx`. Any external `.tsx`
/// tileset the map references is resolved relative to that path.
/// `pubspec.yaml`, for example `assets/tiles/map.tmx`. External tilesets
/// (`.tsx`) and object templates (`.tx`) that the map references are
/// resolved relative to that path.
/// {@endtemplate}
///
/// {@template tiled_images_directory}
Expand Down Expand Up @@ -306,8 +306,8 @@ class RenderableTiledMap {

/// Parses a string returning a [RenderableTiledMap].
///
/// External `.tsx` tilesets the map references are resolved against
/// [tsxDirectory].
/// External tilesets (`.tsx`) and object templates (`.tx`) that the map
/// references are resolved against [tsxDirectory].
///
/// {@macro tiled_images_directory}
///
Expand All @@ -330,9 +330,12 @@ class RenderableTiledMap {
double atlasPackingSpacingY = 0,
String? package,
}) async {
// tiled calls this once for every external file the map references,
// including files referenced from other external files, always with a
// path relative to the map.
final map = await TiledMap.fromString(
contents,
(key) => FlameTsxProvider.parse(key, bundle, tsxDirectory),
(path) => (bundle ?? Flame.bundle).loadString('$tsxDirectory$path'),
);
return fromTiledMap(
map,
Expand Down
3 changes: 1 addition & 2 deletions packages/flame_tiled/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ dependencies:
flutter:
sdk: flutter
meta: ^1.12.0
tiled: ^0.11.0
xml: ^6.3.0
tiled: ^0.12.0

dev_dependencies:
dartdoc: ^9.0.0
Expand Down
Loading