From 5e1bccdc479bf14de0ec265964a46c59e572357b Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 20 Aug 2018 22:36:01 +0300 Subject: [PATCH] Organized clone functions Found one last place where the unit was destroyed manually and not using the destroy() function =\ --- android/build.gradle | 2 +- .../unciv/logic/automation/UnitAutomation.kt | 8 ++++---- core/src/com/unciv/logic/battle/Battle.kt | 5 ++--- .../com/unciv/logic/city/CityConstructions.kt | 2 +- core/src/com/unciv/logic/city/CityInfo.kt | 10 +++++----- .../logic/civilization/CivilizationInfo.kt | 19 ++++++++++--------- .../civilization/ScienceVictoryManager.kt | 6 ++++++ .../ui/worldscreen/bottombar/BattleTable.kt | 2 +- 8 files changed, 30 insertions(+), 24 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index e66d5994d5..b0454b0e1f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,7 +21,7 @@ android { applicationId "com.unciv.game" minSdkVersion 14 targetSdkVersion 26 - versionCode 125 + versionCode 126 versionName "2.7.10" } buildTypes { diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index e30411447f..dd835a6f9c 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -97,7 +97,7 @@ class UnitAutomation{ } fun containsAttackableEnemy(tile: TileInfo, civInfo: CivilizationInfo): Boolean { - val tileCombatant = Battle().getMapCombatantOfTile(tile) + val tileCombatant = Battle(civInfo.gameInfo).getMapCombatantOfTile(tile) if(tileCombatant==null) return false return tileCombatant.getCivilization()!=civInfo && civInfo.isAtWarWith(tileCombatant.getCivilization()) } @@ -194,7 +194,7 @@ class UnitAutomation{ // Only take enemies we can fight without dying .filter { 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() } @@ -209,11 +209,11 @@ class UnitAutomation{ enemyTileToAttack = capturableCity // enter it quickly, top priority! 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 if (enemyTileToAttack != null) { - val enemy = Battle().getMapCombatantOfTile(enemyTileToAttack.tileToAttack)!! + val enemy = Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(enemyTileToAttack.tileToAttack)!! unit.moveToTile(enemyTileToAttack.tileToAttackFrom) val setupAction = UnitActions().getUnitActions(unit, UnCivGame.Current.worldScreen) .firstOrNull { it.name == "Set up" } diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 0438b1e819..7075dc3ce7 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -1,7 +1,6 @@ package com.unciv.logic.battle import com.badlogic.gdx.graphics.Color -import com.unciv.UnCivGame import com.unciv.logic.GameInfo import com.unciv.logic.city.CityInfo 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 */ -class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) { +class Battle(val gameInfo:GameInfo) { fun attack(attacker: ICombatant, defender: ICombatant) { val attackedTile = defender.getTile() @@ -111,7 +110,7 @@ class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) { city.moveToCiv(attacker.getCivilization()) city.health = city.getMaxHealth() / 2 // I think that cities recover to half health when conquered? city.getCenterTile().apply { - militaryUnit = null + if(militaryUnit!=null) militaryUnit!!.destroy() if(civilianUnit!=null) captureCivilianUnit(attacker,MapUnitCombatant(civilianUnit!!)) } diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index 5c71a31f43..649b411149 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -20,9 +20,9 @@ class CityConstructions { //region pure functions fun clone(): CityConstructions { val toReturn = CityConstructions() - toReturn.currentConstruction=currentConstruction toReturn.builtBuildings.addAll(builtBuildings) toReturn.inProgressConstructions.putAll(inProgressConstructions) + toReturn.currentConstruction=currentConstruction return toReturn } diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 13c0e712b5..c0d8a7a97f 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -66,15 +66,15 @@ class CityInfo { //region pure functions fun clone(): CityInfo { val toReturn = CityInfo() - toReturn.population = population.clone() - toReturn.health=health + toReturn.location=location toReturn.name=name - toReturn.tiles.addAll(tiles) - toReturn.workedTiles.addAll(workedTiles) + toReturn.health=health + toReturn.population = population.clone() toReturn.cityConstructions=cityConstructions.clone() toReturn.expansion = expansion.clone() + toReturn.tiles.addAll(tiles) + toReturn.workedTiles.addAll(workedTiles) toReturn.isBeingRazed=isBeingRazed - toReturn.location=location return toReturn } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index e3b3de68a6..6388bb46f7 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -50,17 +50,18 @@ class CivilizationInfo { fun clone(): 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.cities.addAll(cities.map { it.clone() }) - toReturn.tech = tech.clone() - toReturn.difficulty=difficulty - toReturn.policies = policies.clone() - toReturn.happiness=happiness - toReturn.greatPeople=greatPeople.clone() - toReturn.gold = gold - toReturn.goldenAges = goldenAges.clone() - toReturn.civName=civName + toReturn.exploredTiles.addAll(exploredTiles) return toReturn } diff --git a/core/src/com/unciv/logic/civilization/ScienceVictoryManager.kt b/core/src/com/unciv/logic/civilization/ScienceVictoryManager.kt index f6c0177a70..2fbd3f392e 100644 --- a/core/src/com/unciv/logic/civilization/ScienceVictoryManager.kt +++ b/core/src/com/unciv/logic/civilization/ScienceVictoryManager.kt @@ -13,6 +13,12 @@ class ScienceVictoryManager { requiredParts.add("SS Statis Chamber", 1) } + fun clone(): ScienceVictoryManager { + val toReturn = ScienceVictoryManager() + toReturn.currentParts.putAll(currentParts) + return toReturn + } + fun unconstructedParts(): Counter { val counter = requiredParts.clone() counter.remove(currentParts) diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index 59f1c09420..a4a2a9d157 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -41,7 +41,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { if (worldScreen.tileMapHolder.selectedTile == null) return 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 || !(attacker.getCivilization().exploredTiles.contains(selectedTile.position) || UnCivGame.Current.viewEntireMapForDebug)) {