From 99c0abd24df0b2f063d3297b1b6829285f9e9d41 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 6 Aug 2018 13:08:45 +0300 Subject: [PATCH] Fixed crash when you would melee attack an enemy unit that was in a friendly civ's (unenterable) territory --- android/build.gradle | 4 ++-- core/src/com/unciv/logic/battle/Battle.kt | 7 +++++-- core/src/com/unciv/logic/map/MapUnit.kt | 9 +++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 31d3a97e16..2ef77471e1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.game" minSdkVersion 14 targetSdkVersion 26 - versionCode 114 - versionName "2.7.3" + versionCode 115 + versionName "2.7.3.2" } buildTypes { release { diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 74b2936b09..86efd6a81a 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -65,11 +65,14 @@ class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) { } // we're a melee unit and we destroyed\captured an enemy unit - else if (attacker.isMelee() && (defender.isDefeated() || defender.getCivilization()==attacker.getCivilization() )) { + else if (attacker.isMelee() + && (defender.isDefeated() || defender.getCivilization()==attacker.getCivilization() ) + // This is so that if we attack e.g. a barbarian in enemy territory that we can't enter, we won't enter it + && (attacker as MapUnitCombatant).unit.canMoveTo(attackedTile)) { // we destroyed an enemy military unit and there was a civilian unit in the same tile as well if(attackedTile.civilianUnit!=null && attackedTile.civilianUnit!!.civInfo != attacker.getCivilization()) captureCivilianUnit(attacker,MapUnitCombatant(attackedTile.civilianUnit!!)) - (attacker as MapUnitCombatant).unit.moveToTile(attackedTile) + attacker.unit.moveToTile(attackedTile) } if(attacker is MapUnitCombatant) { diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index d0fcc9e36d..b7166da7f6 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -114,7 +114,8 @@ class MapUnit { val distanceToTiles = getDistanceToTiles() if (!distanceToTiles.containsKey(otherTile)) throw Exception("You can't get there from here!") - if(!canMoveTo(otherTile)) throw Exception("Can't enter this tile!") + if(!canMoveTo(otherTile)) + throw Exception("Can't enter this tile!") if(otherTile.isCityCenter() && otherTile.getOwner()!=civInfo) throw Exception("This is an enemy city, you can't go here!") currentMovement -= distanceToTiles[otherTile]!! @@ -193,9 +194,9 @@ class MapUnit { */ fun canMoveTo(tile: TileInfo): Boolean { val tileOwner = tile.getOwner() - if(tileOwner!=null && tileOwner.civName!=owner) { - if (tile.isCityCenter() || !civInfo.canEnterTiles(tileOwner)) return false - } + if(tileOwner!=null && tileOwner.civName!=owner + && (tile.isCityCenter() || !civInfo.canEnterTiles(tileOwner))) return false + if (getBaseUnit().unitType== UnitType.Civilian) return tile.civilianUnit==null && (tile.militaryUnit==null || tile.militaryUnit!!.owner==owner) else return tile.militaryUnit==null && (tile.civilianUnit==null || tile.civilianUnit!!.owner==owner)