From 0eb79fff82574b318e916a4ad26bece666775232 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 6 May 2020 23:37:02 +0300 Subject: [PATCH] Resolved #2588 - instead of tile ownershp being transferrable between cities, cities can now work tiles belonging to other cities. --- android/assets/GameSettings_.json | 1 - core/src/com/unciv/logic/city/CityInfo.kt | 12 ------------ .../unciv/ui/cityscreen/CityScreenTileTable.kt | 13 ++++--------- .../com/unciv/ui/cityscreen/CityTileGroup.kt | 14 +++++++++----- core/src/com/unciv/ui/tilegroups/TileGroup.kt | 18 +++++++++--------- 5 files changed, 22 insertions(+), 36 deletions(-) delete mode 100644 android/assets/GameSettings_.json diff --git a/android/assets/GameSettings_.json b/android/assets/GameSettings_.json deleted file mode 100644 index 6b623684a2..0000000000 --- a/android/assets/GameSettings_.json +++ /dev/null @@ -1 +0,0 @@ -{checkForDueUnits:false,tutorialsShown:[Injured_Units,Roads_and_Railroads,Happiness,Enemy_City,Golden_Age,_OtherCivEncountered,Strategic_Resource,Siege_Units,City_Expansion,Apollo_Program,Embarking,Tile_Clicked,Culture_and_Policies,_EnemyCityNeedsConqueringWithMeleeUnit,Introduction,Workers,Luxury_Resource,_BarbarianEncountered,_Slow_Start,Cities,Slow_Start,Unhappiness,Contact_Me],tutorialTasksCompleted:[See your stats breakdown,Found city,Enter city screen,Open the options table,Create a trade route,Conquer a city,Pick construction,Move an air unit,Pick technology,Move unit,Meet another civilization,Reassign worked tiles,Pass a turn,Construct an improvement],soundEffectsVolume:0,musicVolume:0,showTutorials:false,showPixelUnits:true,userId:b4565c3f-c349-446e-a013-909b6e73fb89,windowState:{width:1920,height:986}} \ No newline at end of file diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 4d091ab05d..7d01afd8c0 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -528,18 +528,6 @@ class CityInfo { tryUpdateRoadStatus() } - // Acquiring in this context means transferring ownership to another city of the same civ - fun canAcquireTile(newTileInfo: TileInfo): Boolean { - val owningCity = newTileInfo.getCity() - if (owningCity!=null && owningCity!=this - && newTileInfo.getOwner()!!.isCurrentPlayer() - && newTileInfo.aerialDistanceTo(getCenterTile()) <= 3 - && newTileInfo.neighbors.any{it.getCity()==this}) { - return true - } - return false - } - private fun tryUpdateRoadStatus(){ if(getCenterTile().roadStatus==RoadStatus.None){ val roadImprovement = getRuleset().tileImprovements["Road"] diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt index 9c3790326e..b7e606c0a3 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt @@ -2,12 +2,10 @@ package com.unciv.ui.cityscreen import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.ui.Table -import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.UncivGame import com.unciv.logic.map.TileInfo import com.unciv.models.UncivSound import com.unciv.models.stats.Stats -import com.unciv.models.translations.tr import com.unciv.ui.utils.* import kotlin.math.roundToInt @@ -52,13 +50,10 @@ class CityScreenTileTable(val cityScreen: CityScreen): Table(){ innerTable.add(buyTileButton).row() innerTable.add("You have [${city.civInfo.gold}] gold".toLabel(Color.YELLOW, 16)).padTop(2f) } - if(city.canAcquireTile(selectedTile)) { - val acquireTileButton = "Acquire".toTextButton() - acquireTileButton.onClick { - city.expansion.takeOwnership(selectedTile) - UncivGame.Current.setScreen(CityScreen(city)) - } - innerTable.add(acquireTileButton).row() + + if(city.civInfo.cities.filterNot { it==city } + .any { it.workedTiles.contains(selectedTile.position) }) { + innerTable.add("Worked by [${selectedTile.getCity()!!.name}]".toLabel()).row() } if(city.workedTiles.contains(selectedTile.position)){ diff --git a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt index 05429453c4..e7a19c0efa 100644 --- a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt +++ b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt @@ -30,11 +30,9 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin // this needs to happen on update, because we can buy tiles, which changes the definition of the bought tiles... when { - tileInfo.getCity()!=city -> { // outside of city + tileInfo.getOwner()!=city.civInfo -> { // outside of civ boundary baseLayerGroup.color.a = 0.3f yieldGroup.isVisible = false - if (city.canAcquireTile(tileInfo)) - icons.addPopulationIcon(ImageGetter.getStatIcon("Acquire")) } tileInfo !in city.tilesInRange -> { // within city but not close enough to be workable @@ -42,6 +40,12 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin baseLayerGroup.color.a = 0.5f } + city.civInfo.cities.filterNot { it==city } // worked by another city + .any { it.workedTiles.contains(tileInfo.position) } -> { + // Don't fade out, but don't add a population icon either. + } + + tileInfo.isLocked() -> { icons.addPopulationIcon(ImageGetter.getImage("OtherIcons/Lock")) } @@ -70,7 +74,7 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin yieldGroup.centerX(this) yieldGroup.y= height * 0.25f - yieldGroup.height / 2 - if (tileInfo.isWorked() || city.canAcquireTile(tileInfo)) { + if (tileInfo.isWorked()) { yieldGroup.color = Color.WHITE } else if(!tileInfo.isCityCenter()){ @@ -85,7 +89,7 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin populationIcon.setPosition(width / 2 - populationIcon.width / 2, height * 0.85f - populationIcon.height / 2) - if (tileInfo.isWorked() || city.canAcquireTile(tileInfo)) { + if (tileInfo.isWorked()) { populationIcon.color = Color.WHITE } else if(!tileInfo.isCityCenter()){ diff --git a/core/src/com/unciv/ui/tilegroups/TileGroup.kt b/core/src/com/unciv/ui/tilegroups/TileGroup.kt index 178fd23f22..2dd605980b 100644 --- a/core/src/com/unciv/ui/tilegroups/TileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/TileGroup.kt @@ -241,21 +241,21 @@ open class TileGroup(var tileInfo: TileInfo, var tileSetStrings:TileSetStrings) val identifier = tileBaseImageLocations.joinToString(";") if (identifier == tileImagesIdentifier) return - for(image in tileBaseImages) image.remove() + for (image in tileBaseImages) image.remove() tileBaseImages.clear() - for(location in tileBaseImageLocations.reversed()) { // reversed because we send each one to back + for (location in tileBaseImageLocations.reversed()) { // reversed because we send each one to back // Here we check what actual tiles exist, and pick one - not at random, but based on the tile location, // so it stays consistent throughout the game val existingImages = ArrayList() existingImages.add(location) - var i=2 - while (true){ - val tileVariant = location+i - if(ImageGetter.imageExists(location+i)) existingImages.add(tileVariant) + var i = 2 + while (true) { + val tileVariant = location + i + if (ImageGetter.imageExists(tileVariant)) existingImages.add(tileVariant) else break - i+=1 + i += 1 } - val finalLocation = existingImages.random(Random(tileInfo.position.hashCode()+location.hashCode())) + val finalLocation = existingImages.random(Random(tileInfo.position.hashCode() + location.hashCode())) val image = ImageGetter.getImage(finalLocation) tileBaseImages.add(image) @@ -268,7 +268,7 @@ open class TileGroup(var tileInfo: TileInfo, var tileSetStrings:TileSetStrings) fun showMilitaryUnit(viewingCiv: CivilizationInfo) = showEntireMap || viewingCiv.viewableInvisibleUnitsTiles.contains(tileInfo) - || (!tileInfo.hasEnemySubmarine(viewingCiv)) + || !tileInfo.hasEnemySubmarine(viewingCiv) fun isViewable(viewingCiv: CivilizationInfo) = showEntireMap || viewingCiv.viewableTiles.contains(tileInfo)