Fixed bug where melee attacker would always move to attack, even if attackee was right next to it

This commit is contained in:
Yair Morgenstern
2018-04-24 21:42:53 +03:00
parent fe09351db7
commit 5eec4deb84

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.battle.* import com.unciv.logic.battle.*
import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.UnitType import com.unciv.logic.map.UnitType
import com.unciv.ui.cityscreen.addClickListener import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
@ -110,36 +111,42 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
val attackerDistanceToTiles = attacker.unit.getDistanceToTiles() val attackerDistanceToTiles = attacker.unit.getDistanceToTiles()
val attackerCanReachDefender:Boolean
var tileToMoveTo:TileInfo? = null
if(attacker.getCombatantType() == CombatantType.Melee){ if(attacker.getCombatantType() == CombatantType.Melee){
if(attacker.getTile().neighbors.contains(defender.getTile())){
attackerCanReachDefender=true
}
else {
val tilesCanAttackFrom = attackerDistanceToTiles.filter { val tilesCanAttackFrom = attackerDistanceToTiles.filter {
attacker.unit.currentMovement - it.value > 0 // once we reach it we'll still have energy to attack attacker.unit.currentMovement - it.value > 0 // once we reach it we'll still have energy to attack
&& it.key.unit==null && it.key.unit == null
&& it.key.neighbors.contains(defender.getTile()) } && it.key.neighbors.contains(defender.getTile())
}
if(tilesCanAttackFrom.isEmpty()) attackButton.disable() if (tilesCanAttackFrom.isEmpty()) attackerCanReachDefender=false
else { else {
val tileToMoveTo = tilesCanAttackFrom.minBy { it.value }!!.key // travel least distance tileToMoveTo = tilesCanAttackFrom.minBy { it.value }!!.key // travel least distance
attackButton.addClickListener { attackerCanReachDefender=true
attacker.unit.moveToTile(tileToMoveTo)
battle.attack(attacker,defender)
worldScreen.update()
} }
} }
} }
else { // ranged else { // ranged
val tilesInRange = UnCivGame.Current.gameInfo.tileMap.getTilesInDistance(attacker.getTile().position, 2) val tilesInRange = UnCivGame.Current.gameInfo.tileMap.getTilesInDistance(attacker.getTile().position, 2)
val attackerCanReachDefender = tilesInRange.contains(defender.getTile()) attackerCanReachDefender = tilesInRange.contains(defender.getTile())
if(!attackerCanReachDefender) attackButton.disable() }
if(!attackerCanReachDefender || attacker.unit.currentMovement==0f) attackButton.disable()
else { else {
attackButton.addClickListener { attackButton.addClickListener {
if(tileToMoveTo!=null) attacker.unit.moveToTile(tileToMoveTo)
battle.attack(attacker, defender) battle.attack(attacker, defender)
worldScreen.update() worldScreen.update()
} }
} }
}
if(attacker.unit.currentMovement==0f) attackButton.disable()
add(attackButton).colspan(2) add(attackButton).colspan(2)
pack() pack()