FormatException when parsing a tmx file
devoncarew opened this issue · 2 comments
devoncarew commented
This is for version 0.9.0
of package:tiled. I get a FormatException when parsing a specific tmx file. I believe this is due to some empty terrain values in some tile elements; for example, <tile id="4" terrain=",,,0"/>
.
The following FormatException was thrown building FutureBuilder<void>(dirty, state:
_FutureBuilderState<void>#f3561):
Invalid number (at character 1)
^
The relevant error-causing widget was:
FutureBuilder<void>
FutureBuilder:file:///Users/devoncarew/.pub-cache/hosted/pub.dev/flame-1.4.0/lib/src/game/game_widget/game_widget.dart:358:28
When the exception was thrown, this was the stack:
#0 int._handleFormatError (dart:core-patch/integers_patch.dart:124:7)
#1 int.parse (dart:core-patch/integers_patch.dart:50:14)
#2 MappedListIterable.elementAt (dart:_internal/iterable.dart:414:31)
#3 ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#4 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#5 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#6 new List.of (dart:core-patch/array_patch.dart:52:28)
#7 ListIterable.toList (dart:_internal/iterable.dart:214:7)
#8 new Tile.parse (package:tiled/src/tileset/tile.dart:64:20)
#9 MappedListIterable.elementAt (dart:_internal/iterable.dart:414:31)
#10 ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#11 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#12 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#13 new List.of (dart:core-patch/array_patch.dart:52:28)
#14 ListIterable.toList (dart:_internal/iterable.dart:214:7)
#15 Parser.getChildrenAs (package:tiled/src/parser.dart:88:42)
#16 new Tileset.parse.<anonymous closure> (package:tiled/src/tileset/tileset.dart:127:20)
#17 XmlParser.formatSpecificParsing (package:tiled/src/parser.dart:41:15)
#18 new Tileset.parse (package:tiled/src/tileset/tileset.dart:125:26)
#19 new TiledMap.parse.<anonymous closure> (package:tiled/src/tiled_map.dart:285:26)
#20 MappedListIterable.elementAt (dart:_internal/iterable.dart:414:31)
#21 ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#22 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#23 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#24 new List.of (dart:core-patch/array_patch.dart:52:28)
#25 ListIterable.toList (dart:_internal/iterable.dart:214:7)
#26 Parser.getChildrenAs (package:tiled/src/parser.dart:88:42)
#27 new TiledMap.parse (package:tiled/src/tiled_map.dart:280:29)
#28 TileMapParser.parseTmx (package:tiled/src/tile_map_parser.dart:19:21)
#29 TiledMap.fromString (package:tiled/src/tiled_map.dart:145:26)
<asynchronous suspension>
#30 RenderableTiledMap.fromString (package:flame_tiled/src/renderable_tile_map.dart:209:17)
<asynchronous suspension>
#31 TiledComponent.load (package:flame_tiled/src/tiled_component.dart:93:7)
<asynchronous suspension>
#32 TiledGame.onLoad (file:///Users/devoncarew/projects/devoncarew/mushamils/example/tiled_example.dart:23:9)
<asynchronous suspension>
#33 _GameWidgetState.loaderFuture.<anonymous closure> (package:flame/src/game/game_widget/game_widget.dart:201:11)
<asynchronous suspension>
#34 _FutureBuilderState._subscribe.<anonymous closure> (package:flutter/src/widgets/async.dart:628:33)
<asynchronous suspension>
spydon commented
Thanks for your bug report! I'll post it on Discord to see if anyone can look into it.
devoncarew commented
I have an attempt at a fix here: #61.
I'm not sure how common use of the terrain fields are (or whether flame_tiled
supports them), but the editor I was using generates them. From the spec here: https://doc.mapeditor.org/en/stable/reference/tmx-map-format/#tile, it does seem like empty values are supported (Leaving out a value means that corner has no terrain
).