From 73fc55eb0c8c7c9f086176be0a6f62b06ed0a7b3 Mon Sep 17 00:00:00 2001 From: lyrjie Date: Tue, 21 Jan 2020 20:48:52 +0300 Subject: [PATCH] Fix: Oligarchy (#1740) * Fix: Oligarchy applying to civilian, water and air units * Fix: moving unit into/out of city doesn't trigger income refresh --- core/src/com/unciv/logic/civilization/CivInfoStats.kt | 6 +++++- core/src/com/unciv/logic/map/MapUnit.kt | 2 ++ core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/civilization/CivInfoStats.kt b/core/src/com/unciv/logic/civilization/CivInfoStats.kt index db9a229062..1c59b2a6c6 100644 --- a/core/src/com/unciv/logic/civilization/CivInfoStats.kt +++ b/core/src/com/unciv/logic/civilization/CivInfoStats.kt @@ -18,7 +18,11 @@ class CivInfoStats(val civInfo: CivilizationInfo){ val freeUnits = 3 var unitsToPayFor = civInfo.getCivUnits() if(civInfo.policies.isAdopted("Oligarchy")) - unitsToPayFor = unitsToPayFor.filterNot { it.getTile().isCityCenter() } + // Only land military units can truly "garrison" + unitsToPayFor = unitsToPayFor.filterNot { + it.getTile().isCityCenter() + && it.canGarrison() + } var numberOfUnitsToPayFor = max(0f, unitsToPayFor.count().toFloat() - freeUnits) if(civInfo.nation.unique=="67% chance to earn 25 Gold and recruit a Barbarian unit from a conquered encampment, -25% land units maintenance."){ diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index e4320d5549..a30326c288 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -280,6 +280,8 @@ class MapUnit { if(hasUnique("This unit and all others in adjacent tiles heal 5 additional HP. This unit heals 5 additional HP outside of friendly territory.")) healingBonus +=5 return healingBonus } + + fun canGarrison() = type.isMilitary() && type.isLandUnit() //endregion diff --git a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt index c4421bb6cd..1ce9aca4ad 100644 --- a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt @@ -243,6 +243,12 @@ class UnitMovementAlgorithms(val unit:MapUnit) { unit.removeFromTile() unit.putInTile(destination) + // Unit maintenance changed + if (unit.canGarrison() + && (origin.isCityCenter() || destination.isCityCenter()) + && unit.civInfo.policies.isAdopted("Oligarchy") + ) unit.civInfo.updateStatsForNextTurn() + if(unit.type.isAircraftCarrierUnit() || unit.type.isMissileCarrierUnit()){ // bring along the payloads for(airUnit in origin.airUnits.filter { !it.isUnitInCity }){ airUnit.removeFromTile()