mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-08 23:08:35 +07:00
Allow settlers to be captured when worker replacements exist
This commit is contained in:
@ -1,7 +1,6 @@
|
|||||||
package com.unciv
|
package com.unciv
|
||||||
|
|
||||||
object Constants {
|
object Constants {
|
||||||
const val worker = "Worker"
|
|
||||||
const val settler = "Settler"
|
const val settler = "Settler"
|
||||||
const val eraSpecificUnit = "Era Starting Unit"
|
const val eraSpecificUnit = "Era Starting Unit"
|
||||||
const val spreadReligion = "Spread Religion"
|
const val spreadReligion = "Spread Religion"
|
||||||
|
@ -625,20 +625,7 @@ object Battle {
|
|||||||
attacker.getCivInfo().popupAlerts.add(PopupAlert(AlertType.RecapturedCivilian, capturedUnitTile.position.toString()))
|
attacker.getCivInfo().popupAlerts.add(PopupAlert(AlertType.RecapturedCivilian, capturedUnitTile.position.toString()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Captured settlers are converted to workers unless captured by barbarians (so they can be returned later).
|
else -> captureOrConvertToWorker(capturedUnit, attacker.getCivInfo())
|
||||||
capturedUnit.hasUnique(UniqueType.FoundCity) && !attacker.getCivInfo().isBarbarian() -> {
|
|
||||||
capturedUnit.destroy()
|
|
||||||
// This is so that future checks which check if a unit has been captured are caught give the right answer
|
|
||||||
// For example, in postBattleMoveToAttackedTile
|
|
||||||
capturedUnit.civ = attacker.getCivInfo()
|
|
||||||
|
|
||||||
val workerTypeUnit = attacker.getCivInfo().gameInfo.ruleset.units.values
|
|
||||||
.firstOrNull { it.isCivilian() && it.getMatchingUniques(UniqueType.BuildImprovements).any { it.params[0] == "Land" } }
|
|
||||||
|
|
||||||
if (workerTypeUnit != null)
|
|
||||||
attacker.getCivInfo().units.placeUnitNearTile(capturedUnitTile.position, workerTypeUnit.name)
|
|
||||||
}
|
|
||||||
else -> capturedUnit.capturedBy(attacker.getCivInfo())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wasDestroyedInstead)
|
if (!wasDestroyedInstead)
|
||||||
@ -653,6 +640,23 @@ object Battle {
|
|||||||
capturedUnit.updateVisibleTiles()
|
capturedUnit.updateVisibleTiles()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun captureOrConvertToWorker(capturedUnit: MapUnit, capturingCiv: Civilization){
|
||||||
|
// Captured settlers are converted to workers unless captured by barbarians (so they can be returned later).
|
||||||
|
if (capturedUnit.hasUnique(UniqueType.FoundCity) && !capturingCiv.isBarbarian()) {
|
||||||
|
capturedUnit.destroy()
|
||||||
|
// This is so that future checks which check if a unit has been captured are caught give the right answer
|
||||||
|
// For example, in postBattleMoveToAttackedTile
|
||||||
|
capturedUnit.civ = capturingCiv
|
||||||
|
|
||||||
|
val workerTypeUnit = capturingCiv.gameInfo.ruleset.units.values
|
||||||
|
.firstOrNull { it.isCivilian() && it.getMatchingUniques(UniqueType.BuildImprovements).any { it.params[0] == "Land" } }
|
||||||
|
|
||||||
|
if (workerTypeUnit != null)
|
||||||
|
capturingCiv.units.placeUnitNearTile(capturedUnit.currentTile.position, workerTypeUnit.name)
|
||||||
|
}
|
||||||
|
else capturedUnit.capturedBy(capturingCiv)
|
||||||
|
}
|
||||||
|
|
||||||
fun destroyIfDefeated(attackedCiv: Civilization, attacker: Civilization) {
|
fun destroyIfDefeated(attackedCiv: Civilization, attacker: Civilization) {
|
||||||
if (attackedCiv.isDefeated()) {
|
if (attackedCiv.isDefeated()) {
|
||||||
if (attackedCiv.isCityState())
|
if (attackedCiv.isCityState())
|
||||||
|
@ -6,6 +6,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.Constants
|
import com.unciv.Constants
|
||||||
import com.unciv.UncivGame
|
import com.unciv.UncivGame
|
||||||
|
import com.unciv.logic.battle.Battle
|
||||||
import com.unciv.logic.civilization.AlertType
|
import com.unciv.logic.civilization.AlertType
|
||||||
import com.unciv.logic.civilization.Civilization
|
import com.unciv.logic.civilization.Civilization
|
||||||
import com.unciv.logic.civilization.LocationAction
|
import com.unciv.logic.civilization.LocationAction
|
||||||
@ -13,14 +14,10 @@ import com.unciv.logic.civilization.NotificationCategory
|
|||||||
import com.unciv.logic.civilization.PopupAlert
|
import com.unciv.logic.civilization.PopupAlert
|
||||||
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
||||||
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
|
||||||
import com.unciv.models.translations.fillPlaceholders
|
import com.unciv.models.translations.fillPlaceholders
|
||||||
import com.unciv.models.translations.tr
|
import com.unciv.models.translations.tr
|
||||||
import com.unciv.ui.audio.MusicMood
|
import com.unciv.ui.audio.MusicMood
|
||||||
import com.unciv.ui.audio.MusicTrackChooserFlags
|
import com.unciv.ui.audio.MusicTrackChooserFlags
|
||||||
import com.unciv.ui.images.ImageGetter
|
|
||||||
import com.unciv.ui.popups.Popup
|
|
||||||
import com.unciv.ui.screens.diplomacyscreen.LeaderIntroTable
|
|
||||||
import com.unciv.ui.components.KeyCharAndCode
|
import com.unciv.ui.components.KeyCharAndCode
|
||||||
import com.unciv.ui.components.extensions.disable
|
import com.unciv.ui.components.extensions.disable
|
||||||
import com.unciv.ui.components.extensions.keyShortcuts
|
import com.unciv.ui.components.extensions.keyShortcuts
|
||||||
@ -28,6 +25,9 @@ import com.unciv.ui.components.extensions.onActivation
|
|||||||
import com.unciv.ui.components.extensions.pad
|
import com.unciv.ui.components.extensions.pad
|
||||||
import com.unciv.ui.components.extensions.toLabel
|
import com.unciv.ui.components.extensions.toLabel
|
||||||
import com.unciv.ui.components.extensions.toTextButton
|
import com.unciv.ui.components.extensions.toTextButton
|
||||||
|
import com.unciv.ui.images.ImageGetter
|
||||||
|
import com.unciv.ui.popups.Popup
|
||||||
|
import com.unciv.ui.screens.diplomacyscreen.LeaderIntroTable
|
||||||
import com.unciv.ui.screens.victoryscreen.VictoryScreen
|
import com.unciv.ui.screens.victoryscreen.VictoryScreen
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -363,15 +363,7 @@ class AlertPopup(val worldScreen: WorldScreen, val popupAlert: PopupAlert): Popu
|
|||||||
})
|
})
|
||||||
responseTable.add(getCloseButton(Constants.no, 'n') {
|
responseTable.add(getCloseButton(Constants.no, 'n') {
|
||||||
// Take it for ourselves
|
// Take it for ourselves
|
||||||
// Settlers become workers at this point
|
Battle.captureOrConvertToWorker(capturedUnit, captor)
|
||||||
if (capturedUnit.hasUnique(UniqueType.FoundCity)) {
|
|
||||||
capturedUnit.destroy()
|
|
||||||
// This is so that future checks which check if a unit has been captured are caught give the right answer
|
|
||||||
// For example, in postBattleMoveToAttackedTile
|
|
||||||
capturedUnit.civ = captor
|
|
||||||
captor.units.placeUnitNearTile(tile.position, Constants.worker)
|
|
||||||
} else
|
|
||||||
capturedUnit.capturedBy(captor)
|
|
||||||
}).row()
|
}).row()
|
||||||
add(responseTable)
|
add(responseTable)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user