mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-22 05:41:11 +07:00
Performance improvements
This commit is contained in:
@ -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() }
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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() }
|
||||||
|
@ -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}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
Reference in New Issue
Block a user