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 val unitList = GameBasics.Units.values
.filter { !it.unitType.isCivilian() && it.uniqueTo == null } .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!!)) } && (it.obsoleteTech == null || !allResearchedTechs.contains(it.obsoleteTech!!)) }
val landUnits = unitList.filter { it.unitType.isLandUnit() } val landUnits = unitList.filter { it.unitType.isLandUnit() }

View File

@ -84,7 +84,7 @@ class SpecificUnitAutomation{
val tilesNearCities = unit.civInfo.gameInfo.civilizations.flatMap { it.cities } val tilesNearCities = unit.civInfo.gameInfo.civilizations.flatMap { it.cities }
.flatMap { .flatMap {
val distanceAwayFromCity = 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 // If the CITY OWNER knows that the UNIT OWNER agreed not to settle near them
&& it.civInfo.getDiplomacyManager(unit.civInfo).hasFlag(DiplomacyFlags.AgreedToNotSettleNearUs)) && it.civInfo.getDiplomacyManager(unit.civInfo).hasFlag(DiplomacyFlags.AgreedToNotSettleNearUs))
6 6

View File

@ -147,8 +147,8 @@ class UnitAutomation{
fun containsAttackableEnemy(tile: TileInfo, combatant: ICombatant): Boolean { fun containsAttackableEnemy(tile: TileInfo, combatant: ICombatant): Boolean {
if(combatant is MapUnitCombatant){ if(combatant is MapUnitCombatant){
if (combatant.unit.isEmbarked()) { if (combatant.unit.isEmbarked()) {
if (combatant.isRanged()) return false
if (tile.isWater) return false // can't attack water units while embarked, only land 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 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 if(!combatant.getCivInfo().isAtWarWith(tileCombatant.getCivInfo())) return false
//only submarine and destroyer can attack submarine //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 (tileCombatant.isInvisible() && !tile.isCityCenter()) {
if (combatant is MapUnitCombatant if (combatant is MapUnitCombatant
&& combatant.unit.hasUnique("Can attack submarines") && combatant.unit.hasUnique("Can attack submarines")

View File

@ -322,7 +322,7 @@ class CityInfo {
.flatMap { it.cities } .flatMap { it.cities }
.filter { it.getCenterTile().arialDistanceTo(getCenterTile()) <= 6 } .filter { it.getCenterTile().arialDistanceTo(getCenterTile()) <= 6 }
val civsWithCloseCities = citiesWithin6Tiles.map { it.civInfo }.distinct() val civsWithCloseCities = citiesWithin6Tiles.map { it.civInfo }.distinct()
.filter { it.exploredTiles.contains(location) } .filter { it.knows(civInfo) && it.exploredTiles.contains(location) }
for(otherCiv in civsWithCloseCities) for(otherCiv in civsWithCloseCities)
otherCiv.getDiplomacyManager(civInfo).setFlag(DiplomacyFlags.SettledCitiesNearUs,30) otherCiv.getDiplomacyManager(civInfo).setFlag(DiplomacyFlags.SettledCitiesNearUs,30)
} }

View File

@ -129,6 +129,7 @@ class CivilizationInfo {
fun getDiplomacyManager(civName: String) = diplomacy[civName]!! fun getDiplomacyManager(civName: String) = diplomacy[civName]!!
fun getKnownCivs() = diplomacy.values.map { it.otherCiv() } fun getKnownCivs() = diplomacy.values.map { it.otherCiv() }
fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName) fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName)
fun knows(otherCiv: CivilizationInfo) = knows(otherCiv.civName)
fun getCapital()=cities.first { it.isCapital() } fun getCapital()=cities.first { it.isCapital() }
fun isPlayerCivilization() = playerType==PlayerType.Human fun isPlayerCivilization() = playerType==PlayerType.Human

View File

@ -54,7 +54,7 @@ class DiplomacyScreen:CameraStageBaseScreen() {
val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization()
for (civ in UnCivGame.Current.gameInfo.civilizations for (civ in UnCivGame.Current.gameInfo.civilizations
.filterNot { it.isDefeated() || it.isPlayerCivilization() || it.isBarbarianCivilization() }) { .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() } val civIndicator = ImageGetter.getCircle().apply { color = civ.getNation().getSecondaryColor() }
.surroundWithCircle(100f).apply { circle.color = civ.getNation().getColor() } .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 java.util.*
import kotlin.math.min 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" var sound="click"
fun sound(soundName:String): UnitAction {sound=soundName; return this} 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.Button
import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.Constants
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.Constants
import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
@ -69,7 +69,7 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){
val actionButton = Button(CameraStageBaseScreen.skin) val actionButton = Button(CameraStageBaseScreen.skin)
actionButton.add(getIconForUnitAction(unitAction.name)).size(20f).pad(5f) actionButton.add(getIconForUnitAction(unitAction.name)).size(20f).pad(5f)
actionButton.add( actionButton.add(
Label(unitAction.title,CameraStageBaseScreen.skin) Label(unitAction.title.tr(),CameraStageBaseScreen.skin)
.setFontColor(if(unitAction.currentAction) Color.YELLOW else Color.WHITE)) .setFontColor(if(unitAction.currentAction) Color.YELLOW else Color.WHITE))
.pad(5f) .pad(5f)
actionButton.pack() actionButton.pack()