Performance improvements

This commit is contained in:
Yair Morgenstern
2019-06-10 17:31:07 +03:00
parent bd0b61b909
commit 89f689bcc9
8 changed files with 10 additions and 9 deletions

View File

@ -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() }

View File

@ -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

View File

@ -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")

View File

@ -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)
}

View File

@ -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

View File

@ -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() }

View File

@ -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}
}

View File

@ -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()