From d72694fd802ae06fbe03c96dfa448d55b1287d9f Mon Sep 17 00:00:00 2001 From: Marko Koschak Date: Thu, 19 Sep 2024 17:28:12 +0200 Subject: [PATCH] Update LDtk level map view to korge 6.0.0-beta4 (#6) * Update to korge 6.0.0-beta4 * Fix example code and refactor LDTKView - Github workflow build was updated to use java 21 and gradle version 8.8. - Example sources were updated to work with new Korge version. - Setup of LDTKLayerView was adapted to use TileMapData internally instead of plain IntArrays. --- .github/workflows/gradle.yml | 6 +-- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../korlibs/korge/ldtk/view/LDTKView.kt | 20 +++++++--- src/commonMain/kotlin/MainLDTKSampleScene.kt | 39 ++++++++++--------- 5 files changed, 40 insertions(+), 29 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 3f19bf7..e39b777 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -23,11 +23,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '11' - distribution: 'temurin' + java-version: '21' + distribution: 'zulu' - name: Build with Gradle uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 with: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 373f9d2..0ff0db0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,3 +1,3 @@ [plugins] -korge = { id = "com.soywiz.korge", version = "5.0.5" } +korge = { id = "com.soywiz.korge", version = "6.0.0-beta4" } #korge = { id = "com.soywiz.korge", version = "999.0.0.999" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c30b486..2617362 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/korge-ldtk/src/commonMain/kotlin/korlibs/korge/ldtk/view/LDTKView.kt b/korge-ldtk/src/commonMain/kotlin/korlibs/korge/ldtk/view/LDTKView.kt index 51530ec..56b971f 100644 --- a/korge-ldtk/src/commonMain/kotlin/korlibs/korge/ldtk/view/LDTKView.kt +++ b/korge-ldtk/src/commonMain/kotlin/korlibs/korge/ldtk/view/LDTKView.kt @@ -90,6 +90,9 @@ class LDTKEntityView( } +/** + * A view that represents a layer of a LDTK level map. + */ class LDTKLayerView( val llayer: LDTKLayer, var showCollisions: Boolean = false @@ -100,9 +103,16 @@ class LDTKLayerView( val layerDef = world.layersDefsById[layer.layerDefUid] val tilesetExt = world.tilesetDefsById[layer.tilesetDefUid] - val intGrid = IntArray2(layer.cWid, layer.cHei, layer.intGridCSV.copyOf(layer.cWid * layer.cHei)) - val tileData = StackedIntArray2(layer.cWid, layer.cHei, -1) + val intGrid = TileMapData(width = layer.cWid, height = layer.cHei, tileSet = world.intsTileSet) + val tileData = TileMapData( + width = layer.cWid, + height = layer.cHei, + tileSet = if(tilesetExt?.tileset != null) tilesetExt.tileset else TileSet.EMPTY + ) + /** + * Function to add all tiles from the layer to the tileMap view. + */ fun addTiles() { if (tilesetExt != null && layerDef != null) { val tileset = tilesetExt.def @@ -125,14 +135,14 @@ class LDTKLayerView( val tileId = ty * cellsTilesPerRow + tx val flipX = tile.f.hasBitSet(0) val flipY = tile.f.hasBitSet(1) - tileData.push(x, y, TileInfo(tileId, flipX = flipX, flipY = flipY, offsetX = dx, offsetY = dy).data) + tileData.push(x, y, Tile(tile = tileId, offsetX = dx, offsetY = dy, flipX = flipX, flipY = flipY, rotate = false)) } if (tilesetExt.tileset != null) { - tileMap(tileData, tilesetExt.tileset!!, smoothing = false) + tileMap(tileData, smoothing = false) .alpha(layerDef.displayOpacity) .also { if (!world.tilesetIsExtruded) it.filters(IdentityFilter.Nearest) } .also { it.overdrawTiles = 1 } - tileMap(intGrid, world.intsTileSet, smoothing = false) + tileMap(intGrid, smoothing = false) .visible(showCollisions) .also { if (!world.tilesetIsExtruded) it.filters(IdentityFilter.Nearest) } .also { it.overdrawTiles = 1 } diff --git a/src/commonMain/kotlin/MainLDTKSampleScene.kt b/src/commonMain/kotlin/MainLDTKSampleScene.kt index bd58b2b..8ce4c40 100644 --- a/src/commonMain/kotlin/MainLDTKSampleScene.kt +++ b/src/commonMain/kotlin/MainLDTKSampleScene.kt @@ -3,7 +3,7 @@ import korlibs.datastructure.StackedIntArray2 import korlibs.image.bitmap.slice import korlibs.image.color.Colors import korlibs.image.format.readBitmap -import korlibs.image.tiles.TileSet +import korlibs.image.tiles.* import korlibs.io.file.std.resourcesVfs import korlibs.korge.input.onMagnify import korlibs.korge.input.onRotate @@ -15,7 +15,6 @@ import korlibs.korge.tween.tween import korlibs.korge.view.* import korlibs.korge.view.filter.IdentityFilter import korlibs.korge.view.filter.filters -import korlibs.korge.view.tiles.TileInfo import korlibs.korge.view.tiles.tileMap import korlibs.math.geom.Anchor import korlibs.math.geom.ScaleMode @@ -61,30 +60,32 @@ class MainLDTKSampleScene : PixelatedScene(SizeInt(1280, 720), sceneScaleMode = val layerDef = layersDefsById[layer.layerDefUid] ?: continue val tilesetExt = tilesetDefsById[layer.tilesetDefUid] ?: continue val intGrid = IntArray2(layer.cWid, layer.cHei, layer.intGridCSV.copyOf(layer.cWid * layer.cHei)) - val tileData = StackedIntArray2(layer.cWid, layer.cHei, -1) val tileset = tilesetExt.def val gridSize = tileset.tileGridSize //val fsprites = FSprites(layer.autoLayerTiles.size) //val view = fsprites.createView(bitmap).also { it.scale(2) } //addChild(view) - for (tile in layer.autoLayerTiles) { - val (px, py) = tile.px - val (tileX, tileY) = tile.src - val x = px / gridSize - val y = py / gridSize - val dx = px % gridSize - val dy = py % gridSize - val tx = tileX / gridSize - val ty = tileY / gridSize - val cellsTilesPerRow = tileset.pxWid / gridSize - val tileId = ty * cellsTilesPerRow + tx - val flipX = tile.f.hasBitSet(0) - val flipY = tile.f.hasBitSet(1) - tileData.push(x, y, TileInfo(tileId, flipX = flipX, flipY = flipY, offsetX = dx, offsetY = dy).data) - } if (tilesetExt.tileset != null) { - tileMap(tileData, tilesetExt.tileset).alpha(layerDef.displayOpacity) + val tileData = TileMapData(width = layer.cWid, height = layer.cHei, tileSet = tilesetExt.tileset) + + for (tile in layer.autoLayerTiles) { + val (px, py) = tile.px + val (tileX, tileY) = tile.src + val x = px / gridSize + val y = py / gridSize + val dx = px % gridSize + val dy = py % gridSize + val tx = tileX / gridSize + val ty = tileY / gridSize + val cellsTilesPerRow = tileset.pxWid / gridSize + val tileId = ty * cellsTilesPerRow + tx + val flipX = tile.f.hasBitSet(0) + val flipY = tile.f.hasBitSet(1) + tileData.push(x, y, Tile(tileId, flipX = flipX, flipY = flipY, offsetX = dx, offsetY = dy, rotate = false)) + } + + tileMap(tileData).alpha(layerDef.displayOpacity) } //tileset!!. //println(intGrid)