mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-22 22:00:24 +07:00
City tiles are always contiguous, otherwise loads of wierd bugs happen
Also, better calculation of the number of claimed tiles In retrospect this has been plaguing us for a long time
This commit is contained in:
@ -6,6 +6,7 @@ import com.unciv.logic.automation.Automation
|
||||
import com.unciv.logic.map.TileInfo
|
||||
import com.unciv.ui.utils.withItem
|
||||
import com.unciv.ui.utils.withoutItem
|
||||
import kotlin.math.max
|
||||
import kotlin.math.pow
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@ -20,8 +21,12 @@ class CityExpansionManager {
|
||||
return toReturn
|
||||
}
|
||||
|
||||
fun tilesClaimed() = cityInfo.tiles.size - 7
|
||||
fun isAreaMaxed(): Boolean = (cityInfo.tiles.size >= 90)
|
||||
fun tilesClaimed(): Int {
|
||||
val tilesAroundCity = cityInfo.getCenterTile().getTilesInDistance(1)
|
||||
.map { it.position }
|
||||
return cityInfo.tiles.filterNot { it in tilesAroundCity }.size
|
||||
}
|
||||
fun isAreaMaxed(): Boolean = cityInfo.tiles.size >= 90
|
||||
|
||||
// This one has conflicting sources -
|
||||
// http://civilization.wikia.com/wiki/Mathematics_of_Civilization_V says it's 20+(10(t-1))^1.1
|
||||
@ -29,7 +34,7 @@ class CityExpansionManager {
|
||||
// (per game XML files) at 6*(t+0.4813)^1.3
|
||||
// The second seems to be more based, so I'll go with that
|
||||
fun getCultureToNextTile(): Int {
|
||||
var cultureToNextTile = 6 * (kotlin.math.max(0, tilesClaimed()) + 1.4813).pow(1.3)
|
||||
var cultureToNextTile = 6 * (max(0, tilesClaimed()) + 1.4813).pow(1.3)
|
||||
if (cityInfo.civInfo.containsBuildingUnique("Cost of acquiring new tiles reduced by 25%"))
|
||||
cultureToNextTile *= 0.75 //Speciality of Angkor Wat
|
||||
if (cityInfo.containsBuildingUnique("Culture and Gold costs of acquiring new tiles reduced by 25% in this city"))
|
||||
@ -40,6 +45,7 @@ class CityExpansionManager {
|
||||
|
||||
fun buyTile(tileInfo: TileInfo) {
|
||||
val goldCost = getGoldCostOfTile(tileInfo)
|
||||
|
||||
class NotEnoughGoldToBuyTileException : Exception()
|
||||
if (cityInfo.civInfo.gold < goldCost) throw NotEnoughGoldToBuyTileException()
|
||||
cityInfo.civInfo.gold -= goldCost
|
||||
@ -65,8 +71,10 @@ class CityExpansionManager {
|
||||
fun chooseNewTileToOwn(): TileInfo? {
|
||||
for (i in 2..5) {
|
||||
val tiles = cityInfo.getCenterTile().getTilesInDistance(i)
|
||||
.filter { it.getOwner() == null
|
||||
&& it.neighbors.any { tile -> tile.getOwner() == cityInfo.civInfo } }
|
||||
.filter {
|
||||
it.getOwner() == null
|
||||
&& it.neighbors.any { tile -> tile.getCity() == cityInfo }
|
||||
}
|
||||
val chosenTile = tiles.maxBy { Automation.rankTile(it, cityInfo.civInfo) }
|
||||
if (chosenTile != null)
|
||||
return chosenTile
|
||||
|
Reference in New Issue
Block a user