Next-Turn Progressbar (#9409)

* Next-Turn Progressbar

* Next-Turn Progressbar - doc

* NextTurnProgress: Rethink max on first turn
This commit is contained in:
SomeTroglodyte
2023-05-22 16:59:28 +02:00
committed by GitHub
parent 575983578a
commit 5f60c887f7
7 changed files with 167 additions and 23 deletions

View File

@ -34,6 +34,7 @@ import com.unciv.models.ruleset.nation.Difficulty
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.audio.MusicMood
import com.unciv.ui.audio.MusicTrackChooserFlags
import com.unciv.ui.screens.worldscreen.status.NextTurnProgress
import com.unciv.utils.DebugUtils
import com.unciv.utils.debug
import java.util.UUID
@ -277,7 +278,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
fun isSimulation(): Boolean = turns < DebugUtils.SIMULATE_UNTIL_TURN
|| turns < simulateMaxTurns && simulateUntilWin
fun nextTurn() {
fun nextTurn(progressBar: NextTurnProgress? = null) {
var player = currentPlayerCiv
var playerIndex = civilizations.indexOf(player)
@ -299,7 +300,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
// would skip a turn if an AI civ calls nextTurn
// this happens when resigning a multiplayer game)
if (player.isHuman()) {
TurnManager(player).endTurn()
TurnManager(player).endTurn(progressBar)
setNextPlayer()
}
@ -314,7 +315,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
{
// Starting preparations
TurnManager(player).startTurn()
TurnManager(player).startTurn(progressBar)
// Automation done here
TurnManager(player).automateTurn()
@ -326,7 +327,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
}
// Clean up
TurnManager(player).endTurn()
TurnManager(player).endTurn(progressBar)
// To the next player
setNextPlayer()
@ -341,7 +342,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
currentPlayerCiv = getCivilization(currentPlayer)
// Starting his turn
TurnManager(player).startTurn()
TurnManager(player).startTurn(progressBar)
// No popups for spectators
if (currentPlayerCiv.isSpectator())

View File

@ -19,6 +19,7 @@ import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.ruleset.unique.endTurn
import com.unciv.models.stats.Stats
import com.unciv.ui.components.MayaCalendar
import com.unciv.ui.screens.worldscreen.status.NextTurnProgress
import com.unciv.utils.Log
import kotlin.math.max
import kotlin.math.min
@ -27,7 +28,7 @@ import kotlin.random.Random
class TurnManager(val civInfo: Civilization) {
fun startTurn() {
fun startTurn(progressBar: NextTurnProgress? = null) {
if (civInfo.isSpectator()) return
if (civInfo.isMajorCiv() && civInfo.isAlive()) {
@ -66,7 +67,10 @@ class TurnManager(val civInfo: Civilization) {
civInfo.cache.updateCitiesConnectedToCapital()
startTurnFlags()
updateRevolts()
for (city in civInfo.cities) CityTurnManager(city).startTurn() // Most expensive part of startTurn
for (city in civInfo.cities) {
progressBar?.increment()
CityTurnManager(city).startTurn() // Most expensive part of startTurn
}
for (unit in civInfo.units.getCivUnits()) UnitTurnManager(unit).startTurn()
@ -218,7 +222,7 @@ class TurnManager(val civInfo: Civilization) {
((4 + Random.Default.nextInt(3)) * max(civInfo.gameInfo.speed.modifier, 1f)).toInt()
fun endTurn() {
fun endTurn(progressBar: NextTurnProgress? = null) {
val notificationsLog = civInfo.notificationsLog
val notificationsThisTurn = Civilization.NotificationsLog(civInfo.gameInfo.turns)
notificationsThisTurn.notifications.addAll(civInfo.notifications)
@ -278,8 +282,10 @@ class TurnManager(val civInfo: Civilization) {
// To handle tile's owner issue (#8246), we need to run cities being razed first.
// a city can be removed while iterating (if it's being razed) so we need to iterate over a copy - sorting does one
for (city in civInfo.cities.sortedByDescending { it.isBeingRazed })
for (city in civInfo.cities.sortedByDescending { it.isBeingRazed }) {
progressBar?.increment()
CityTurnManager(city).endTurn()
}
civInfo.temporaryUniques.endTurn()