diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index 8ffde44aff..fc54b3106f 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -149,7 +149,7 @@ class GameInfo { } val unitList = GameBasics.Units.values .filter { !it.unitType.isCivilian() && it.uniqueTo == null } - .filter{ allResearchedTechs.contains(it.requiredTech) + .filter{ (it.requiredTech==null || allResearchedTechs.contains(it.requiredTech!!)) && (it.obsoleteTech == null || !allResearchedTechs.contains(it.obsoleteTech!!)) } val landUnits = unitList.filter { it.unitType.isLandUnit() } diff --git a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt index e1bab520ef..c323ac0dea 100644 --- a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt @@ -84,7 +84,7 @@ class SpecificUnitAutomation{ val tilesNearCities = unit.civInfo.gameInfo.civilizations.flatMap { it.cities } .flatMap { val distanceAwayFromCity = - if (unit.civInfo.knows(it.civInfo.civName) + if (unit.civInfo.knows(it.civInfo) // If the CITY OWNER knows that the UNIT OWNER agreed not to settle near them && it.civInfo.getDiplomacyManager(unit.civInfo).hasFlag(DiplomacyFlags.AgreedToNotSettleNearUs)) 6 diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index cd97b020e0..f76793517b 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -147,8 +147,8 @@ class UnitAutomation{ fun containsAttackableEnemy(tile: TileInfo, combatant: ICombatant): Boolean { if(combatant is MapUnitCombatant){ if (combatant.unit.isEmbarked()) { - if (combatant.isRanged()) return false if (tile.isWater) return false // can't attack water units while embarked, only land + if (combatant.isRanged()) return false } if (tile.isLand && combatant.unit.hasUnique("Can only attack water")) return false } @@ -159,7 +159,7 @@ class UnitAutomation{ if(!combatant.getCivInfo().isAtWarWith(tileCombatant.getCivInfo())) return false //only submarine and destroyer can attack submarine - //garisoned submarine can be attacked by anyone, or the city will be in invincible + //garrisoned submarine can be attacked by anyone, or the city will be in invincible if (tileCombatant.isInvisible() && !tile.isCityCenter()) { if (combatant is MapUnitCombatant && combatant.unit.hasUnique("Can attack submarines") diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 255e95d742..a59737a83f 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -322,7 +322,7 @@ class CityInfo { .flatMap { it.cities } .filter { it.getCenterTile().arialDistanceTo(getCenterTile()) <= 6 } val civsWithCloseCities = citiesWithin6Tiles.map { it.civInfo }.distinct() - .filter { it.exploredTiles.contains(location) } + .filter { it.knows(civInfo) && it.exploredTiles.contains(location) } for(otherCiv in civsWithCloseCities) otherCiv.getDiplomacyManager(civInfo).setFlag(DiplomacyFlags.SettledCitiesNearUs,30) } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 2db9d86f1e..03151e3680 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -129,6 +129,7 @@ class CivilizationInfo { fun getDiplomacyManager(civName: String) = diplomacy[civName]!! fun getKnownCivs() = diplomacy.values.map { it.otherCiv() } fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName) + fun knows(otherCiv: CivilizationInfo) = knows(otherCiv.civName) fun getCapital()=cities.first { it.isCapital() } fun isPlayerCivilization() = playerType==PlayerType.Human diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index be551c3677..8e160995a5 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -54,7 +54,7 @@ class DiplomacyScreen:CameraStageBaseScreen() { val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() for (civ in UnCivGame.Current.gameInfo.civilizations .filterNot { it.isDefeated() || it.isPlayerCivilization() || it.isBarbarianCivilization() }) { - if (!currentPlayerCiv.knows(civ.civName)) continue + if (!currentPlayerCiv.knows(civ)) continue val civIndicator = ImageGetter.getCircle().apply { color = civ.getNation().getSecondaryColor() } .surroundWithCircle(100f).apply { circle.color = civ.getNation().getColor() } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index b5e38a59be..1254af4245 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -20,7 +20,7 @@ import com.unciv.ui.worldscreen.optionstable.YesNoPopupTable import java.util.* import kotlin.math.min -class UnitAction(var name: String, var canAct: Boolean, var currentAction: Boolean = false, var title: String = name.tr(), var action: () -> Unit = {}){ +class UnitAction(var name: String, var canAct: Boolean, var currentAction: Boolean = false, var title: String = name, var action: () -> Unit = {}){ var sound="click" fun sound(soundName:String): UnitAction {sound=soundName; return this} } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt index 0c722463ab..0e9584f3a8 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt @@ -6,9 +6,9 @@ import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.ui.Button import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.unciv.Constants import com.unciv.UnCivGame import com.unciv.logic.map.MapUnit -import com.unciv.Constants import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen @@ -69,7 +69,7 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){ val actionButton = Button(CameraStageBaseScreen.skin) actionButton.add(getIconForUnitAction(unitAction.name)).size(20f).pad(5f) actionButton.add( - Label(unitAction.title,CameraStageBaseScreen.skin) + Label(unitAction.title.tr(),CameraStageBaseScreen.skin) .setFontColor(if(unitAction.currentAction) Color.YELLOW else Color.WHITE)) .pad(5f) actionButton.pack()