Skip to content

Commit 192824e

Browse files
committed
feat: added support for Tiled 1.9.0 class property, #1182
1 parent b5a0e5d commit 192824e

4 files changed

Lines changed: 47 additions & 2 deletions

File tree

fxgl-entity/src/main/kotlin/com/almasb/fxgl/entity/level/tiled/TMXLevelLoader.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import javax.xml.stream.events.StartElement
3333
* @author Almas Baimagambetov (almaslvl@gmail.com)
3434
*/
3535

36-
private const val TILED_VERSION_LATEST = "1.4.2"
36+
private const val TILED_VERSION_LATEST = "1.9.0"
3737

3838
class TMXLevelLoader
3939
@JvmOverloads constructor(
@@ -133,6 +133,7 @@ class TMXLevelLoader
133133
data.run {
134134
put("name", tiledObject.name)
135135
put("type", tiledObject.type)
136+
put("class", tiledObject.type)
136137
put("width", tiledObject.width)
137138
put("height", tiledObject.height)
138139
put("rotation", tiledObject.rotation)
@@ -407,13 +408,19 @@ class TMXLevelLoader
407408
private fun parseObject(layer: Layer, obj: TiledObject, start: StartElement) {
408409
obj.name = start.getString("name")
409410
obj.type = start.getString("type")
411+
obj.typeClass = start.getString("class")
410412
obj.id = start.getInt("id")
411413
obj.x = start.getInt("x")
412414
obj.y = start.getInt("y")
413415
obj.rotation = start.getFloat("rotation")
414416
obj.width = start.getInt("width")
415417
obj.height = start.getInt("height")
416418

419+
// re-map semantics for 1.9+
420+
if (obj.typeClass.isNotEmpty() && obj.type.isEmpty()) {
421+
obj.type = obj.typeClass
422+
}
423+
417424
// gid is stored as UInt, so parsing as int gives incorrect representation
418425
val gidUInt = start.getUInt("gid")
419426

fxgl-entity/src/main/kotlin/com/almasb/fxgl/entity/level/tiled/TiledObject.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class TiledObject(var id: Int = 0,
1818
var height: Int = 0,
1919
var name: String = "",
2020
var type: String = "",
21+
// from 1.9
22+
var typeClass: String = "",
2123
var visible: Boolean = true,
2224
var x: Int = 0,
2325
var y: Int = 0,

fxgl-entity/src/test/kotlin/com/almasb/fxgl/entity/level/tiled/TMXLevelLoaderTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ class TMXLevelLoaderTest {
190190
}
191191

192192
@ParameterizedTest
193-
@CsvSource("sewers_v1_1_2.tmx", "sewers_v1_2_3.tmx")
193+
@CsvSource("sewers_v1_1_2.tmx", "sewers_v1_2_3.tmx", "sewers_v1_9_0.tmx")
194194
fun parse(mapName: String) {
195195
val map = javaClass.getResourceAsStream(mapName).use {
196196
TMXLevelLoader().parse(it)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<map version="1.9" tiledversion="1.9.0" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="24" tileheight="24" infinite="0" nextlayerid="5" nextobjectid="7">
3+
<tileset firstgid="1" name="sewer_tileset" tilewidth="24" tileheight="24" tilecount="72" columns="8">
4+
<image source="sewer_tileset.png" trans="ff00ff" width="192" height="217"/>
5+
</tileset>
6+
<layer id="1" name="Bottom" width="64" height="64">
7+
<data encoding="base64" compression="zlib">
8+
eJztmN1qwkAQRpfeabWgFaHqja1af97D93+kjpiBZdikmwTd7Ho+OFCMRc+E4Vszdc59CN8VE2HqvfYjbCq25rp/LfSetvjfw372f3SN/Vz84/13wlnYV9z+PmTuvxDehGWEf4n3fySMhfce/jrDtujMU/rPhLnw2cNfZxjit+Gazlz36pLA39LFX2focwy8ZgnNPDf/k7vfuz60ue9D679UDMX/S1gJ6xf13wb+b8j+tnf69r/uf5cdTuHv905M//vzKWH//d6J6X9/PiXsf13v1fXfbT7Xaj4l7H+bLrbdHtrx3PY/xa7ijz/++fhrp1me3XGp/LXTmroxNY/2t8+0Svn9F+tvn2mVcv6N9bfPtOrOv6X667l37prPvyX61z3TevYZN5V/DuCPP/74448//vjjjz/++OOPP/74448//vjjjz8hhBBCCCGEkNfLHzZhCrU=
9+
</data>
10+
</layer>
11+
<layer id="2" name="Top" width="64" height="64" opacity="0.49">
12+
<data encoding="base64" compression="zlib">
13+
eJzt1zEOwjAQRFEXhCrJVVKEQIHouP+Z2CK+AhPJ70lfbsfltnYtz/SAMP8f22j/36r97FEd2Tl/96re1fd8P9k57VZN1T28I2WulmpNDwEAAAjpd2FvtPuw34U99yEAAAAAAAAAAAAACT+/lQOV
14+
</data>
15+
</layer>
16+
<objectgroup id="3" name="Collidables">
17+
<object id="1" name="name1" class="type1" x="96" y="0" width="72" height="336">
18+
<properties>
19+
<property name="collidable" type="bool" value="true"/>
20+
<property name="someColor" type="color" value="#ff55ff00"/>
21+
<property name="someInt" type="int" value="33"/>
22+
<property name="someString" value="Text Here"/>
23+
</properties>
24+
</object>
25+
<object id="2" name="name2" class="type2" x="504" y="0" width="360" height="168" rotation="31"/>
26+
<object id="4" name="polygon_name" class="no_type" x="696" y="504">
27+
<polygon points="0,0 120,-72 192,48 24,48"/>
28+
</object>
29+
<object id="6" name="polyline_name" class="no_type" x="936" y="432">
30+
<polyline points="0,0 96,0 96,-96 192,-96 192,96 24,96"/>
31+
</object>
32+
</objectgroup>
33+
<objectgroup id="4" name="Group2">
34+
<object id="3" name="no name" x="240" y="504" width="120" height="120"/>
35+
</objectgroup>
36+
</map>

0 commit comments

Comments
 (0)