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