From 2604ff6ab6da1a5c4bc6fc8f08eace7a515e5c2f Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 21 Jul 2019 23:43:17 +0300 Subject: [PATCH] Fixes to unit moving through occupied tiles --- core/src/com/unciv/logic/map/MapUnit.kt | 18 +++++++++++------- .../unciv/logic/map/UnitMovementAlgorithms.kt | 8 ++++++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 8db9a9c2d6..3418f690c2 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -395,6 +395,16 @@ class MapUnit { } } + fun moveThroughTile(tile: TileInfo){ + if(tile.improvement==Constants.ancientRuins && civInfo.isMajorCiv()) + getAncientRuinBonus() + if(tile.improvement==Constants.barbarianEncampment && !civInfo.isBarbarianCivilization()) + clearEncampment(tile) + + currentTile = tile + updateViewableTiles() + } + fun putInTile(tile:TileInfo){ when { !movement.canMoveTo(tile) -> throw Exception("I can't go there!") @@ -402,13 +412,7 @@ class MapUnit { type.isCivilian() -> tile.civilianUnit=this else -> tile.militaryUnit=this } - currentTile = tile - if(tile.improvement==Constants.ancientRuins && civInfo.isMajorCiv()) - getAncientRuinBonus() - if(tile.improvement==Constants.barbarianEncampment && !civInfo.isBarbarianCivilization()) - clearEncampment(tile) - - updateViewableTiles() + moveThroughTile(tile) } private fun clearEncampment(tile: TileInfo) { diff --git a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt index d78c4c927f..2666c193c7 100644 --- a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt @@ -236,11 +236,15 @@ class UnitMovementAlgorithms(val unit:MapUnit) { if(unit.isFortified() || unit.action=="Set Up" || unit.action=="Sleep") unit.action=null // unfortify/setup after moving + // Move through all intermediate tiles to get ancient ruins, barb encampments + // and to view tiles along the way val pathToFinalTile = distanceToTiles.getPathToTile(destination) + + unit.removeFromTile() for(tile in pathToFinalTile){ - unit.removeFromTile() - unit.putInTile(tile) + unit.moveThroughTile(tile) } + unit.putInTile(destination) }