@@ -128,28 +128,31 @@ class TiledMap {
128
128
/// the [TsxProvider] s returned from the [tsxProviderFunction] .
129
129
/// The [tsxProviderFunction] is most commonly your static [TsxProvider.parse]
130
130
/// implementation.
131
- static Future <TiledMap > fromString (
132
- String contents,
133
- Future <TsxProvider > Function (String key) tsxProviderFunction,
134
- ) async {
135
- final tsxSourcePaths = XmlDocument .parse (contents)
136
- .rootElement
137
- .children
138
- .whereType <XmlElement >()
139
- .where ((element) => element.name.local == 'tileset' )
140
- .map ((e) => e.getAttribute ('source' ));
141
-
142
- final tsxProviders = await Future .wait (
143
- tsxSourcePaths
144
- .where ((key) => key != null )
145
- .map ((key) async => tsxProviderFunction (key! )),
146
- );
147
-
148
- return TileMapParser .parseTmx (
149
- contents,
150
- tsxList: tsxProviders.isEmpty ? null : tsxProviders,
151
- );
152
- }
131
+ // TODO: why is this here? same as parseTmx???
132
+ // static Future<TiledMap> fromString(
133
+ // String contents, {
134
+ // List<ParserProvider>? tsxProviders,
135
+ // List<ParserProvider>? templateProviders,
136
+ // List<ImagePathProvider>? imageProviders,
137
+ // }) async {
138
+ // final tsxSourcePaths = XmlDocument.parse(contents)
139
+ // .rootElement
140
+ // .children
141
+ // .whereType<XmlElement>()
142
+ // .where((element) => element.name.local == 'tileset')
143
+ // .map((e) => e.getAttribute('source'));
144
+ //
145
+ // final tsxProviders = await Future.wait(
146
+ // tsxSourcePaths
147
+ // .where((key) => key != null)
148
+ // .map((key) async => tsxProviderFunction(key!)),
149
+ // );
150
+ //
151
+ // return TileMapParser.parseTmx(
152
+ // contents,
153
+ // tsxList: tsxProviders.isEmpty ? null : tsxProviders,
154
+ // );
155
+ // }
153
156
154
157
// Convenience Methods
155
158
Tile ? tileByGid (int tileGid) {
@@ -311,7 +314,40 @@ class TiledMap {
311
314
);
312
315
}
313
316
314
- factory TiledMap .parse (Parser parser, {List <TsxProviderBase >? tsxList}) {
317
+ static TiledMap parseJson (String json) {
318
+ final parser = JsonParser (jsonDecode (json) as Map <String , dynamic >);
319
+ return TiledMap .parse (parser);
320
+ }
321
+
322
+ /// Parses the provided map xml.
323
+ ///
324
+ /// Accepts an optional list of external TsxProviders for external tilesets
325
+ /// referenced in the map file.
326
+ static TiledMap parseTmx (
327
+ String xml, {
328
+ List <ParserProvider >? tsxProviders,
329
+ List <ParserProvider >? templateProviders,
330
+ List <ImagePathProvider >? imageProviders,
331
+ }) {
332
+ final xmlElement = XmlDocument .parse (xml).rootElement;
333
+ if (xmlElement.name.local != 'map' ) {
334
+ throw 'XML is not in TMX format' ;
335
+ }
336
+ final parser = XmlParser (xmlElement);
337
+ return TiledMap .parse (
338
+ parser,
339
+ tsxProviders: tsxProviders,
340
+ templateProviders: templateProviders,
341
+ imageProviders: imageProviders,
342
+ );
343
+ }
344
+
345
+ factory TiledMap .parse (
346
+ Parser parser, {
347
+ List <ParserProvider >? tsxProviders,
348
+ List <ParserProvider >? templateProviders,
349
+ List <ImagePathProvider >? imageProviders,
350
+ }) {
315
351
final backgroundColorHex = parser.getStringOrNull ('backgroundcolor' );
316
352
final backgroundColor = parser.getColorOrNull ('backgroundcolor' );
317
353
final compressionLevel = parser.getInt ('compressionlevel' , defaults: - 1 );
@@ -338,11 +374,11 @@ class TiledMap {
338
374
'tileset' ,
339
375
(tilesetData) {
340
376
final tilesetSource = tilesetData.getStringOrNull ('source' );
341
- if (tilesetSource == null || tsxList == null ) {
377
+ if (tilesetSource == null || tsxProviders == null ) {
342
378
return Tileset .parse (tilesetData);
343
379
}
344
- final matchingTsx = tsxList .where (
345
- (tsx) => tsx.checkProvidable (tilesetSource),
380
+ final matchingTsx = tsxProviders .where (
381
+ (tsx) => tsx.canProvide (tilesetSource),
346
382
);
347
383
348
384
return Tileset .parse (
0 commit comments