UI: Fixed edges for edge tiles on word wrap maps

This commit is contained in:
yairm210 2025-02-12 09:13:29 +02:00
parent 8f5979ac2a
commit df72363bf0
3 changed files with 19 additions and 24 deletions

View File

@ -310,6 +310,7 @@ class TileMap(initialCapacity: Int = 10) : IsPartOfGameInfoSerialization {
return null return null
} }
/** /**
* Returns the clock position of [otherTile] seen from [tile]'s position * Returns the clock position of [otherTile] seen from [tile]'s position
* Returns -1 if not neighbors * Returns -1 if not neighbors
@ -789,3 +790,16 @@ class TileMap(initialCapacity: Int = 10) : IsPartOfGameInfoSerialization {
.distinct() .distinct()
} }
} }
enum class NeighborDirection(val clockPosition: Int) {
TopRight(2),
BottomRight(4),
Bottom(6),
BottomLeft(8),
TopLeft(10),
Top(12);
companion object {
val byClockPosition = entries.associateBy { it.clockPosition }
}
}

View File

@ -2,6 +2,7 @@ package com.unciv.ui.components.tilegroups
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.Civilization
import com.unciv.logic.map.NeighborDirection
import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.RoadStatus import com.unciv.logic.map.tile.RoadStatus
import com.unciv.models.metadata.GameSettings import com.unciv.models.metadata.GameSettings
@ -9,7 +10,6 @@ import com.unciv.models.ruleset.Ruleset
import com.unciv.models.tilesets.TileSetCache import com.unciv.models.tilesets.TileSetCache
import com.unciv.models.tilesets.TileSetConfig import com.unciv.models.tilesets.TileSetConfig
import com.unciv.ui.components.tilegroups.layers.EdgeTileImage import com.unciv.ui.components.tilegroups.layers.EdgeTileImage
import com.unciv.ui.components.tilegroups.layers.NeighborDirection
import com.unciv.ui.images.ImageAttempter import com.unciv.ui.images.ImageAttempter
import com.unciv.ui.images.ImageGetter import com.unciv.ui.images.ImageGetter

View File

@ -2,15 +2,15 @@ package com.unciv.ui.components.tilegroups.layers
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.Batch import com.badlogic.gdx.graphics.g2d.Batch
import com.badlogic.gdx.math.Vector2
import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.Image
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.Civilization
import com.unciv.logic.map.NeighborDirection
import com.unciv.logic.map.tile.Tile import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.unique.LocalUniqueCache import com.unciv.models.ruleset.unique.LocalUniqueCache
import com.unciv.ui.images.ImageGetter
import com.unciv.ui.components.tilegroups.TileGroup import com.unciv.ui.components.tilegroups.TileGroup
import com.unciv.ui.images.ImageGetter
import com.unciv.ui.screens.basescreen.BaseScreen import com.unciv.ui.screens.basescreen.BaseScreen
import kotlin.random.Random import kotlin.random.Random
@ -108,7 +108,8 @@ class TileLayerTerrain(tileGroup: TileGroup, size: Float) : TileLayer(tileGroup,
private val neighborEdgeDataList: Sequence<NeighborEdgeData> = if (!tile.isTilemapInitialized()) emptySequence() private val neighborEdgeDataList: Sequence<NeighborEdgeData> = if (!tile.isTilemapInitialized()) emptySequence()
else tile.neighbors.map { else tile.neighbors.map {
val direction = NeighborDirection.fromVector(it.position.cpy().sub(tile.position)) val clockPosition = tile.tileMap.getNeighborTileClockPosition(tile, it)
val direction = NeighborDirection.byClockPosition[clockPosition]
NeighborEdgeData(it, direction) NeighborEdgeData(it, direction)
}.toList().asSequence() }.toList().asSequence()
@ -275,24 +276,4 @@ class TileLayerTerrain(tileGroup: TileGroup, size: Float) : TileLayer(tileGroup,
} }
enum class NeighborDirection {
Top, TopRight, TopLeft, Bottom, BottomLeft, BottomRight;
companion object {
fun fromVector(vector2: Vector2): NeighborDirection? {
val x = vector2.x.toInt()
val y = vector2.y.toInt()
return when (x) {
1 -> if (y == 1) Top // x == 1 && y == 1
else TopLeft // x == 1 && y == 0
0 -> if (y == 1) TopRight // x == 0 && y == 1
else BottomLeft // x == 0 && y == -1
-1 -> if (y == -1) Bottom // x == -1 && y == -1
else BottomRight // x == -1 && y == 0
else -> null
}
}
}
}
data class EdgeTileImage(val fileName:String, val originTileFilter: String, val destinationTileFilter: String, val edgeType: NeighborDirection) data class EdgeTileImage(val fileName:String, val originTileFilter: String, val destinationTileFilter: String, val edgeType: NeighborDirection)