mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-06 08:21:36 +07:00
Organized clone functions
Found one last place where the unit was destroyed manually and not using the destroy() function =\
This commit is contained in:
@ -21,7 +21,7 @@ android {
|
|||||||
applicationId "com.unciv.game"
|
applicationId "com.unciv.game"
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 26
|
targetSdkVersion 26
|
||||||
versionCode 125
|
versionCode 126
|
||||||
versionName "2.7.10"
|
versionName "2.7.10"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
@ -97,7 +97,7 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun containsAttackableEnemy(tile: TileInfo, civInfo: CivilizationInfo): Boolean {
|
fun containsAttackableEnemy(tile: TileInfo, civInfo: CivilizationInfo): Boolean {
|
||||||
val tileCombatant = Battle().getMapCombatantOfTile(tile)
|
val tileCombatant = Battle(civInfo.gameInfo).getMapCombatantOfTile(tile)
|
||||||
if(tileCombatant==null) return false
|
if(tileCombatant==null) return false
|
||||||
return tileCombatant.getCivilization()!=civInfo && civInfo.isAtWarWith(tileCombatant.getCivilization())
|
return tileCombatant.getCivilization()!=civInfo && civInfo.isAtWarWith(tileCombatant.getCivilization())
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ class UnitAutomation{
|
|||||||
// Only take enemies we can fight without dying
|
// Only take enemies we can fight without dying
|
||||||
.filter {
|
.filter {
|
||||||
BattleDamage().calculateDamageToAttacker(MapUnitCombatant(unit),
|
BattleDamage().calculateDamageToAttacker(MapUnitCombatant(unit),
|
||||||
Battle().getMapCombatantOfTile(it.tileToAttack)!!) < unit.health
|
Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(it.tileToAttack)!!) < unit.health
|
||||||
}
|
}
|
||||||
|
|
||||||
val cityTilesToAttack = attackableEnemies.filter { it.tileToAttack.isCityCenter() }
|
val cityTilesToAttack = attackableEnemies.filter { it.tileToAttack.isCityCenter() }
|
||||||
@ -209,11 +209,11 @@ class UnitAutomation{
|
|||||||
enemyTileToAttack = capturableCity // enter it quickly, top priority!
|
enemyTileToAttack = capturableCity // enter it quickly, top priority!
|
||||||
|
|
||||||
else if (nonCityTilesToAttack.isNotEmpty()) // second priority, units
|
else if (nonCityTilesToAttack.isNotEmpty()) // second priority, units
|
||||||
enemyTileToAttack = nonCityTilesToAttack.minBy { Battle().getMapCombatantOfTile(it.tileToAttack)!!.getHealth() }
|
enemyTileToAttack = nonCityTilesToAttack.minBy { Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(it.tileToAttack)!!.getHealth() }
|
||||||
else if (cityWithHealthLeft!=null) enemyTileToAttack = cityWithHealthLeft// third priority, city
|
else if (cityWithHealthLeft!=null) enemyTileToAttack = cityWithHealthLeft// third priority, city
|
||||||
|
|
||||||
if (enemyTileToAttack != null) {
|
if (enemyTileToAttack != null) {
|
||||||
val enemy = Battle().getMapCombatantOfTile(enemyTileToAttack.tileToAttack)!!
|
val enemy = Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(enemyTileToAttack.tileToAttack)!!
|
||||||
unit.moveToTile(enemyTileToAttack.tileToAttackFrom)
|
unit.moveToTile(enemyTileToAttack.tileToAttackFrom)
|
||||||
val setupAction = UnitActions().getUnitActions(unit, UnCivGame.Current.worldScreen)
|
val setupAction = UnitActions().getUnitActions(unit, UnCivGame.Current.worldScreen)
|
||||||
.firstOrNull { it.name == "Set up" }
|
.firstOrNull { it.name == "Set up" }
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.unciv.logic.battle
|
package com.unciv.logic.battle
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.unciv.UnCivGame
|
|
||||||
import com.unciv.logic.GameInfo
|
import com.unciv.logic.GameInfo
|
||||||
import com.unciv.logic.city.CityInfo
|
import com.unciv.logic.city.CityInfo
|
||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
@ -12,7 +11,7 @@ import kotlin.math.max
|
|||||||
/**
|
/**
|
||||||
* Damage calculations according to civ v wiki and https://steamcommunity.com/sharedfiles/filedetails/?id=170194443
|
* Damage calculations according to civ v wiki and https://steamcommunity.com/sharedfiles/filedetails/?id=170194443
|
||||||
*/
|
*/
|
||||||
class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) {
|
class Battle(val gameInfo:GameInfo) {
|
||||||
fun attack(attacker: ICombatant, defender: ICombatant) {
|
fun attack(attacker: ICombatant, defender: ICombatant) {
|
||||||
val attackedTile = defender.getTile()
|
val attackedTile = defender.getTile()
|
||||||
|
|
||||||
@ -111,7 +110,7 @@ class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) {
|
|||||||
city.moveToCiv(attacker.getCivilization())
|
city.moveToCiv(attacker.getCivilization())
|
||||||
city.health = city.getMaxHealth() / 2 // I think that cities recover to half health when conquered?
|
city.health = city.getMaxHealth() / 2 // I think that cities recover to half health when conquered?
|
||||||
city.getCenterTile().apply {
|
city.getCenterTile().apply {
|
||||||
militaryUnit = null
|
if(militaryUnit!=null) militaryUnit!!.destroy()
|
||||||
if(civilianUnit!=null) captureCivilianUnit(attacker,MapUnitCombatant(civilianUnit!!))
|
if(civilianUnit!=null) captureCivilianUnit(attacker,MapUnitCombatant(civilianUnit!!))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ class CityConstructions {
|
|||||||
//region pure functions
|
//region pure functions
|
||||||
fun clone(): CityConstructions {
|
fun clone(): CityConstructions {
|
||||||
val toReturn = CityConstructions()
|
val toReturn = CityConstructions()
|
||||||
toReturn.currentConstruction=currentConstruction
|
|
||||||
toReturn.builtBuildings.addAll(builtBuildings)
|
toReturn.builtBuildings.addAll(builtBuildings)
|
||||||
toReturn.inProgressConstructions.putAll(inProgressConstructions)
|
toReturn.inProgressConstructions.putAll(inProgressConstructions)
|
||||||
|
toReturn.currentConstruction=currentConstruction
|
||||||
return toReturn
|
return toReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,15 +66,15 @@ class CityInfo {
|
|||||||
//region pure functions
|
//region pure functions
|
||||||
fun clone(): CityInfo {
|
fun clone(): CityInfo {
|
||||||
val toReturn = CityInfo()
|
val toReturn = CityInfo()
|
||||||
toReturn.population = population.clone()
|
toReturn.location=location
|
||||||
toReturn.health=health
|
|
||||||
toReturn.name=name
|
toReturn.name=name
|
||||||
toReturn.tiles.addAll(tiles)
|
toReturn.health=health
|
||||||
toReturn.workedTiles.addAll(workedTiles)
|
toReturn.population = population.clone()
|
||||||
toReturn.cityConstructions=cityConstructions.clone()
|
toReturn.cityConstructions=cityConstructions.clone()
|
||||||
toReturn.expansion = expansion.clone()
|
toReturn.expansion = expansion.clone()
|
||||||
|
toReturn.tiles.addAll(tiles)
|
||||||
|
toReturn.workedTiles.addAll(workedTiles)
|
||||||
toReturn.isBeingRazed=isBeingRazed
|
toReturn.isBeingRazed=isBeingRazed
|
||||||
toReturn.location=location
|
|
||||||
return toReturn
|
return toReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,17 +50,18 @@ class CivilizationInfo {
|
|||||||
|
|
||||||
fun clone(): CivilizationInfo {
|
fun clone(): CivilizationInfo {
|
||||||
val toReturn = CivilizationInfo()
|
val toReturn = CivilizationInfo()
|
||||||
toReturn.exploredTiles=exploredTiles.toHashSet()
|
toReturn.gold = gold
|
||||||
|
toReturn.happiness=happiness
|
||||||
|
toReturn.difficulty=difficulty
|
||||||
|
toReturn.civName=civName
|
||||||
|
toReturn.tech = tech.clone()
|
||||||
|
toReturn.policies = policies.clone()
|
||||||
|
toReturn.goldenAges = goldenAges.clone()
|
||||||
|
toReturn.greatPeople=greatPeople.clone()
|
||||||
|
toReturn.scienceVictory = scienceVictory.clone()
|
||||||
toReturn.diplomacy.putAll(diplomacy.values.map { it.clone() }.associateBy { it.otherCivName })
|
toReturn.diplomacy.putAll(diplomacy.values.map { it.clone() }.associateBy { it.otherCivName })
|
||||||
toReturn.cities.addAll(cities.map { it.clone() })
|
toReturn.cities.addAll(cities.map { it.clone() })
|
||||||
toReturn.tech = tech.clone()
|
toReturn.exploredTiles.addAll(exploredTiles)
|
||||||
toReturn.difficulty=difficulty
|
|
||||||
toReturn.policies = policies.clone()
|
|
||||||
toReturn.happiness=happiness
|
|
||||||
toReturn.greatPeople=greatPeople.clone()
|
|
||||||
toReturn.gold = gold
|
|
||||||
toReturn.goldenAges = goldenAges.clone()
|
|
||||||
toReturn.civName=civName
|
|
||||||
return toReturn
|
return toReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,12 @@ class ScienceVictoryManager {
|
|||||||
requiredParts.add("SS Statis Chamber", 1)
|
requiredParts.add("SS Statis Chamber", 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun clone(): ScienceVictoryManager {
|
||||||
|
val toReturn = ScienceVictoryManager()
|
||||||
|
toReturn.currentParts.putAll(currentParts)
|
||||||
|
return toReturn
|
||||||
|
}
|
||||||
|
|
||||||
fun unconstructedParts(): Counter<String> {
|
fun unconstructedParts(): Counter<String> {
|
||||||
val counter = requiredParts.clone()
|
val counter = requiredParts.clone()
|
||||||
counter.remove(currentParts)
|
counter.remove(currentParts)
|
||||||
|
@ -41,7 +41,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
|
|||||||
if (worldScreen.tileMapHolder.selectedTile == null) return
|
if (worldScreen.tileMapHolder.selectedTile == null) return
|
||||||
val selectedTile = worldScreen.tileMapHolder.selectedTile!!
|
val selectedTile = worldScreen.tileMapHolder.selectedTile!!
|
||||||
|
|
||||||
val defender: ICombatant? = Battle().getMapCombatantOfTile(selectedTile)
|
val defender: ICombatant? = Battle(worldScreen.gameInfo).getMapCombatantOfTile(selectedTile)
|
||||||
|
|
||||||
if(defender==null || defender.getCivilization()==worldScreen.civInfo
|
if(defender==null || defender.getCivilization()==worldScreen.civInfo
|
||||||
|| !(attacker.getCivilization().exploredTiles.contains(selectedTile.position) || UnCivGame.Current.viewEntireMapForDebug)) {
|
|| !(attacker.getCivilization().exploredTiles.contains(selectedTile.position) || UnCivGame.Current.viewEntireMapForDebug)) {
|
||||||
|
Reference in New Issue
Block a user