mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 05:46:43 -04:00
Finding map tiles now works with a matrix instead of a map - works MUCH faster!
This commit is contained in:
parent
f820b75fff
commit
034f6b0860
@ -9,7 +9,9 @@ import com.unciv.models.gamebasics.GameBasics
|
|||||||
class TileMap {
|
class TileMap {
|
||||||
|
|
||||||
@Transient lateinit var gameInfo: GameInfo
|
@Transient lateinit var gameInfo: GameInfo
|
||||||
@Transient private var tileMap = HashMap<String, TileInfo>()
|
@Transient var tileMatrix=ArrayList<ArrayList<TileInfo?>>() // this works several times faster than a hashmap, the performance difference is really astounding
|
||||||
|
@Transient var leftX=0
|
||||||
|
@Transient var bottomY=0
|
||||||
|
|
||||||
@Deprecated("as of 2.7.10")
|
@Deprecated("as of 2.7.10")
|
||||||
private var tiles = HashMap<String, TileInfo>()
|
private var tiles = HashMap<String, TileInfo>()
|
||||||
@ -18,6 +20,12 @@ class TileMap {
|
|||||||
|
|
||||||
constructor() // for json parsing, we need to have a default constructor
|
constructor() // for json parsing, we need to have a default constructor
|
||||||
|
|
||||||
|
fun clone(): TileMap {
|
||||||
|
val toReturn = TileMap()
|
||||||
|
toReturn.tileList.addAll(tileList.map { it.clone() })
|
||||||
|
return toReturn
|
||||||
|
}
|
||||||
|
|
||||||
val values: Collection<TileInfo>
|
val values: Collection<TileInfo>
|
||||||
get() = tileList
|
get() = tileList
|
||||||
|
|
||||||
@ -28,11 +36,17 @@ class TileMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
operator fun contains(vector: Vector2): Boolean {
|
operator fun contains(vector: Vector2): Boolean {
|
||||||
return tileMap.containsKey(vector.toString())
|
val arrayXIndex = vector.x.toInt()-leftX
|
||||||
|
if(arrayXIndex<0 || arrayXIndex>=tileMatrix.size) return false
|
||||||
|
val arrayYIndex = vector.y.toInt()-bottomY
|
||||||
|
if(arrayYIndex<0 || arrayYIndex>=tileMatrix[arrayXIndex].size) return false
|
||||||
|
return tileMatrix[arrayXIndex][arrayYIndex] != null
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(vector: Vector2): TileInfo {
|
operator fun get(vector: Vector2): TileInfo {
|
||||||
return tileMap[vector.toString()]!!
|
val arrayXIndex = vector.x.toInt()-leftX
|
||||||
|
val arrayYIndex = vector.y.toInt()-bottomY
|
||||||
|
return tileMatrix[arrayXIndex][arrayYIndex]!!
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTilesInDistance(origin: Vector2, distance: Int): List<TileInfo> {
|
fun getTilesInDistance(origin: Vector2, distance: Int): List<TileInfo> {
|
||||||
@ -67,9 +81,19 @@ class TileMap {
|
|||||||
if(tiles.any()) //
|
if(tiles.any()) //
|
||||||
tileList.addAll(tiles.values)
|
tileList.addAll(tiles.values)
|
||||||
|
|
||||||
tileMap.putAll(tileList.associateBy { it.position.toString() })
|
var topY=tileList.map { it.position.y.toInt() }.max()!!
|
||||||
|
bottomY= tileList.map { it.position.y.toInt() }.min()!!
|
||||||
|
var rightX=tileList.map { it.position.x.toInt() }.max()!!
|
||||||
|
leftX = tileList.map { it.position.x.toInt() }.min()!!
|
||||||
|
|
||||||
|
for(x in leftX..rightX){
|
||||||
|
val row = ArrayList<TileInfo?>()
|
||||||
|
for(y in bottomY..topY) row.add(null)
|
||||||
|
tileMatrix.add(row)
|
||||||
|
}
|
||||||
|
|
||||||
for (tileInfo in values){
|
for (tileInfo in values){
|
||||||
|
tileMatrix[tileInfo.position.x.toInt()-leftX][tileInfo.position.y.toInt()-bottomY] = tileInfo
|
||||||
tileInfo.tileMap = this
|
tileInfo.tileMap = this
|
||||||
if(tileInfo.militaryUnit!=null) tileInfo.militaryUnit!!.currentTile = tileInfo
|
if(tileInfo.militaryUnit!=null) tileInfo.militaryUnit!!.currentTile = tileInfo
|
||||||
if(tileInfo.civilianUnit!=null) tileInfo.civilianUnit!!.currentTile = tileInfo
|
if(tileInfo.civilianUnit!=null) tileInfo.civilianUnit!!.currentTile = tileInfo
|
||||||
@ -87,10 +111,5 @@ class TileMap {
|
|||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clone(): TileMap {
|
|
||||||
val toReturn = TileMap()
|
|
||||||
toReturn.tileList.addAll(tileList.map { it.clone() })
|
|
||||||
return toReturn
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user