Solved rare pillage-related crash

This commit is contained in:
Yair Morgenstern
2023-12-31 22:42:19 +02:00
parent 1bf75844a3
commit 15dfb892a7
5 changed files with 23 additions and 230640 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -14,10 +14,8 @@ import com.unciv.logic.civilization.NotificationCategory
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.Tile
import com.unciv.models.UnitActionType
import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActionsPillage
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActionsUpgrade
@ -379,7 +377,9 @@ object UnitAutomation {
if (unit.getTile() != tileToPillage)
unit.movement.moveToTile(tileToPillage)
UnitActions.invokeUnitAction(unit, UnitActionType.Pillage)
// We CANNOT use invokeUnitAction, since the default unit action contains a popup, which - when automated -
// runs a UI action on a side thread leading to crash!
UnitActionsPillage.getPillageAction(unit, unit.currentTile)?.action?.invoke()
return unit.currentMovement == 0f
}

View File

@ -18,8 +18,9 @@ import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.RoadStatus
import com.unciv.logic.map.tile.Tile
import com.unciv.logic.map.tile.TileStatFunctions
import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.logic.map.tile.toStats
import com.unciv.models.UnitActionType
import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.tile.Terrain
import com.unciv.models.ruleset.tile.TileImprovement
import com.unciv.models.ruleset.unique.LocalUniqueCache
@ -28,7 +29,6 @@ import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActionsFromUniques
import com.unciv.utils.Log
import com.unciv.utils.debug
import kotlin.IllegalStateException
private object WorkerAutomationConst {
/** BFS max size is determined by the aerial distance of two cities to connect, padded with this */
@ -506,7 +506,7 @@ class WorkerAutomation(
var priority = 0f
if (tile.getOwner() == civInfo) {
priority += Automation.rankStatsValue(tile.stats.getTerrainStats(), civInfo)
priority += Automation.rankStatsValue(tile.stats.getTerrainStatsBreakdown().toStats(), civInfo)
if (tile.providesYield()) priority += 2
if (tile.isPillaged()) priority += 1
// TODO: Removing fallout is hardcoded for now, but what if we want to have other bad features on tiles?