mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 17:28:57 +07:00
Next-Turn Progressbar (#9409)
* Next-Turn Progressbar * Next-Turn Progressbar - doc * NextTurnProgress: Rethink max on first turn
This commit is contained in:
@ -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())
|
||||
|
@ -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()
|
||||
|
||||
|
Reference in New Issue
Block a user