Code cleanup 2.

This commit is contained in:
Duan Tao 2019-01-10 11:30:33 +08:00
parent 57dce317ea
commit 4e77edcec0
8 changed files with 23 additions and 23 deletions

View File

@ -281,9 +281,9 @@ class UnitAutomation{
}
fun tryBombardEnemy(city: CityInfo): Boolean {
val target = chooseBombardTarget(city)
if (target == null) return false
if (city.canAttack()) {
if (!city.attackedThisTurn) {
val target = chooseBombardTarget(city)
if (target == null) return false
val enemy = Battle(city.civInfo.gameInfo).getMapCombatantOfTile(target)!!
Battle(city.civInfo.gameInfo).attack(CityCombatant(city), enemy)
return true

View File

@ -89,7 +89,7 @@ class Battle(val gameInfo:GameInfo) {
if(unit.isFortified() || unit.action=="Sleep")
attacker.unit.action=null // but not, for instance, if it's Set Up - then it should definitely keep the action!
} else if (attacker is CityCombatant) {
attacker.city.attacksThisTurn ++
attacker.city.attackedThisTurn = true
}
// XP!

View File

@ -195,7 +195,6 @@ class BattleDamage{
fun calculateDamageToAttacker(attacker: ICombatant, defender: ICombatant): Int {
if(attacker.isRanged()) return 0
if(attacker is CityCombatant) return 0
if(defender.getUnitType().isCivilian()) return 0
val ratio = getDefendingStrength(attacker,defender) / getAttackingStrength(attacker,defender)
return (ratio * 30 * getHealthDependantDamageRatio(defender)).toInt()

View File

@ -14,6 +14,7 @@ class CityCombatant(val city: CityInfo) : ICombatant {
override fun isDefeated(): Boolean = city.health==1
override fun isInvisible(): Boolean = false
override fun getCivInfo(): CivilizationInfo = city.civInfo
override fun canAttack(): Boolean = (!city.attackedThisTurn)
override fun takeDamage(damage: Int) {
city.health -= damage

View File

@ -17,6 +17,7 @@ interface ICombatant{
fun getTile(): TileInfo
fun isInvisible(): Boolean
fun getCivInfo(): CivilizationInfo
fun canAttack(): Boolean
fun isMelee(): Boolean {
return this.getUnitType().isMelee()

View File

@ -13,6 +13,7 @@ class MapUnitCombatant(val unit: MapUnit) : ICombatant {
override fun isDefeated(): Boolean = unit.health <= 0
override fun isInvisible(): Boolean = unit.isInvisible()
override fun getCivInfo(): CivilizationInfo = unit.civInfo
override fun canAttack(): Boolean = unit.canAttack()
override fun takeDamage(damage: Int) {
unit.health -= damage

View File

@ -18,6 +18,7 @@ class CityInfo {
@Transient lateinit var civInfo: CivilizationInfo
@Transient var isConnectedToCapital = false
@Transient lateinit var ccenterTile:TileInfo // 'cached' for better performance
@Transient val range = 2
var location: Vector2 = Vector2.Zero
var name: String = ""
@ -32,8 +33,7 @@ class CityInfo {
var tiles = HashSet<Vector2>()
var workedTiles = HashSet<Vector2>()
var isBeingRazed = false
var attacksThisTurn = 0
val range = 2
var attackedThisTurn = false
constructor() // for json parsing, we need to have a default constructor
constructor(civInfo: CivilizationInfo, cityLocation: Vector2) {
@ -85,7 +85,7 @@ class CityInfo {
toReturn.workedTiles = workedTiles
toReturn.isBeingRazed=isBeingRazed
toReturn.isConnectedToCapital = isConnectedToCapital
toReturn.attacksThisTurn = attacksThisTurn
toReturn.attackedThisTurn = attackedThisTurn
return toReturn
}
@ -195,7 +195,7 @@ class CityInfo {
health = min(health + 20, getMaxHealth())
population.unassignExtraPopulation()
}
attacksThisTurn = 0
attackedThisTurn = false
}
fun destroyCity() {
@ -236,8 +236,5 @@ class CityInfo {
return false
}
fun canAttack(): Boolean {
return (attacksThisTurn == 0)
}
//endregion
}

View File

@ -130,18 +130,19 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
val attackButton = TextButton(attackText.tr(), skin).apply { color= Color.RED }
var attackableEnemy : UnitAutomation.AttackableTile? = null
var canAttack : Boolean = false
var canAttack : Boolean = attacker.canAttack()
if (attacker is MapUnitCombatant) {
attacker.unit.getDistanceToTiles()
attackableEnemy = UnitAutomation().getAttackableEnemies(attacker.unit, attacker.unit.getDistanceToTiles())
.firstOrNull{ it.tileToAttack == defender.getTile()}
canAttack = (attacker.unit.canAttack() && attackableEnemy != null)
}
else if (attacker is CityCombatant)
{
canAttack = (attacker.city.canAttack())
&& UnitAutomation().getBombardTargets(attacker.city).contains(defender.getTile())
if (canAttack) {
if (attacker is MapUnitCombatant) {
attacker.unit.getDistanceToTiles()
attackableEnemy = UnitAutomation().getAttackableEnemies(attacker.unit, attacker.unit.getDistanceToTiles())
.firstOrNull{ it.tileToAttack == defender.getTile()}
canAttack = attackableEnemy != null
}
else if (attacker is CityCombatant)
{
canAttack = UnitAutomation().getBombardTargets(attacker.city).contains(defender.getTile())
}
}
if(!canAttack) attackButton.disable()