diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index 2ca7cc3858..820aa4b352 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -861,6 +861,7 @@ You need to restart the game for this change to take effect. = AutoPlay = Show AutoPlay button = Multi-turn AutoPlay amount = +AutoPlay until victory = Start AutoPlay = AutoPlay End Turn = diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index 22f9ddfe06..88f69aa382 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -392,8 +392,13 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion // Do we need to break if player won? if (simulateUntilWin && player.victoryManager.hasWon()) { simulateUntilWin = false + UncivGame.Current.settings.autoPlay.stopAutoPlay() break } + + // Do we need to stop AutoPlay? + if (UncivGame.Current.settings.autoPlay.isAutoPlaying() && player.victoryManager.hasWon()) + UncivGame.Current.settings.autoPlay.stopAutoPlay() // Clean up TurnManager(player).endTurn(progressBar) diff --git a/core/src/com/unciv/models/metadata/GameSettings.kt b/core/src/com/unciv/models/metadata/GameSettings.kt index 7c73a47e65..fce1919a28 100644 --- a/core/src/com/unciv/models/metadata/GameSettings.kt +++ b/core/src/com/unciv/models/metadata/GameSettings.kt @@ -326,6 +326,7 @@ class GameSettings { class GameSettingsAutoPlay { var showAutoPlayButton: Boolean = false + var autoPlayUntilEnd: Boolean = false var autoPlayMaxTurns = 10 var fullAutoPlayAI: Boolean = true var autoPlayMilitary: Boolean = true diff --git a/core/src/com/unciv/ui/popups/options/AutoPlayTab.kt b/core/src/com/unciv/ui/popups/options/AutoPlayTab.kt index e3587250bd..a1f8e2d3d7 100644 --- a/core/src/com/unciv/ui/popups/options/AutoPlayTab.kt +++ b/core/src/com/unciv/ui/popups/options/AutoPlayTab.kt @@ -58,8 +58,19 @@ fun autoPlayTab( ) { settings.autoPlay.showAutoPlayButton = it settings.autoPlay.stopAutoPlay() } + + optionsPopup.addCheckbox( + this, + "AutoPlay until victory", + settings.autoPlay.autoPlayUntilEnd, false + ) { settings.autoPlay.autoPlayUntilEnd = it + if (!it) addAutoPlayMaxTurnsSlider(this, settings, optionsPopup.selectBoxMinWidth) + else optionsPopup.tabs.replacePage(optionsPopup.tabs.activePage, autoPlayTab(optionsPopup))} - addAutoPlayMaxTurnsSlider(this, settings, optionsPopup.selectBoxMinWidth) + + if (!settings.autoPlay.autoPlayUntilEnd) + addAutoPlayMaxTurnsSlider(this, settings, optionsPopup.selectBoxMinWidth) + // optionsPopup.addCheckbox( // this, // "Full AutoPlay AI", diff --git a/core/src/com/unciv/ui/screens/worldscreen/status/NextTurnButton.kt b/core/src/com/unciv/ui/screens/worldscreen/status/NextTurnButton.kt index b37a6807c6..e6f400ab6f 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/status/NextTurnButton.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/status/NextTurnButton.kt @@ -38,7 +38,8 @@ class NextTurnButton( if (!worldScreen.viewingCiv.isSpectator()) TurnManager(worldScreen.viewingCiv).automateTurn() worldScreen.nextTurn() - settings.autoPlay.turnsToAutoPlay-- + if (!settings.autoPlay.autoPlayUntilEnd) + settings.autoPlay.turnsToAutoPlay-- settings.autoPlay.autoPlayTurnInProgress = false } diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsPillage.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsPillage.kt index 89713b3cae..b3ff042440 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsPillage.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsPillage.kt @@ -1,6 +1,7 @@ package com.unciv.ui.screens.worldscreen.unit.actions import com.unciv.GUI +import com.unciv.UncivGame import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationIcon import com.unciv.logic.map.mapunit.MapUnit @@ -18,7 +19,7 @@ object UnitActionsPillage { fun getPillageActions(unit: MapUnit, tile: Tile): List { val pillageAction = getPillageAction(unit, tile) ?: return listOf() - if (pillageAction.action == null || unit.civ.isAI()) + if (pillageAction.action == null || unit.civ.isAI() || (unit.civ.isHuman() && UncivGame.Current.settings.autoPlay.isAutoPlaying())) return listOf(pillageAction) else return listOf(UnitAction(UnitActionType.Pillage, pillageAction.title) { val pillageText = "Are you sure you want to pillage this [${tile.getImprovementToPillageName()!!}]?"