Console create natural wonder and tile find (#11664)

This commit is contained in:
SomeTroglodyte 2024-05-29 22:58:26 +02:00 committed by GitHub
parent cee2346c42
commit bc52704614
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 53 additions and 8 deletions

View File

@ -217,7 +217,8 @@ class CivInfoTransientCache(val civInfo: Civilization) {
}
}
private fun discoverNaturalWonders() {
/** Visible for DevConsole use only */
fun discoverNaturalWonders() {
val newlyViewedNaturalWonders = HashSet<Tile>()
for (tile in civInfo.viewableTiles) {
if (tile.naturalWonder != null && !civInfo.naturalWonders.contains(tile.naturalWonder!!))

View File

@ -22,7 +22,7 @@ internal enum class ConsoleParameterType(
promotionName( { ruleset.unitPromotions.keys } ),
improvementName( { ruleset.tileImprovements.keys } ),
featureName( { ruleset.terrains.values.filter { it.type == TerrainType.TerrainFeature }.map { it.name } } ),
terrainName( { ruleset.terrains.values.filter { it.type.isBaseTerrain }.map { it.name } } ),
terrainName( { ruleset.terrains.values.filter { it.type.isBaseTerrain || it.type == TerrainType.NaturalWonder }.map { it.name } } ),
resourceName( { ruleset.tileResources.keys } ),
stat( { Stat.names() } ),
religionName( { religions.keys } ),

View File

@ -3,9 +3,15 @@ package com.unciv.ui.screens.devconsole
import com.unciv.Constants
import com.unciv.logic.city.City
import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.LocationAction
import com.unciv.logic.civilization.Notification
import com.unciv.logic.civilization.NotificationCategory
import com.unciv.logic.civilization.NotificationIcon
import com.unciv.logic.map.mapgenerator.RiverGenerator
import com.unciv.logic.map.mapgenerator.RiverGenerator.RiverDirections
import com.unciv.logic.map.tile.RoadStatus
import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.tile.Terrain
import com.unciv.models.ruleset.tile.TerrainType
class ConsoleTileCommands: ConsoleCommandNode {
@ -74,12 +80,10 @@ class ConsoleTileCommands: ConsoleCommandNode {
val selectedTile = console.getSelectedTile()
val terrain = console.gameInfo.ruleset.terrains.values.findCliInput(params[0])
?: throw ConsoleErrorException("Unknown terrain")
if (terrain.type != selectedTile.getBaseTerrain().type)
throw ConsoleErrorException("Changing terrain type is not allowed")
selectedTile.baseTerrain = terrain.name
selectedTile.setTerrainTransients()
selectedTile.getCity()?.reassignPopulation()
DevConsoleResponse.OK
if (terrain.type == TerrainType.NaturalWonder)
setNaturalWonder(selectedTile, terrain)
else
setBaseTerrain(selectedTile, terrain)
},
"setresource" to ConsoleAction("tile setresource <resourceName>") { console, params ->
@ -124,8 +128,48 @@ class ConsoleTileCommands: ConsoleCommandNode {
newOwner?.expansion?.takeOwnership(selectedTile)
DevConsoleResponse.OK
},
"find" to ConsoleAction("tile find <tileFilter>") { console, params ->
val filter = params[0]
val locations = console.gameInfo.tileMap.tileList
.filter { it.matchesFilter(filter) }
.map { it.position }
if (locations.isEmpty()) DevConsoleResponse.hint("None found")
else {
val notification = Notification("tile find [$filter]", arrayOf(NotificationIcon.Spy),
LocationAction(locations).asIterable(), NotificationCategory.General)
console.screen.notificationsScroll.oneTimeNotification = notification
notification.execute(console.screen)
DevConsoleResponse.OK
}
},
)
private fun setBaseTerrain(tile: Tile, terrain: Terrain): DevConsoleResponse {
if (terrain.type != tile.getBaseTerrain().type)
throw ConsoleErrorException("Changing terrain type is not allowed")
setBaseTerrain(tile, terrain.name)
return DevConsoleResponse.OK
}
private fun setBaseTerrain(tile: Tile, terrainName: String) {
tile.baseTerrain = terrainName
tile.setTerrainTransients()
tile.getCity()?.reassignPopulation()
}
private fun setNaturalWonder(tile: Tile, wonder: Terrain): DevConsoleResponse {
tile.removeTerrainFeatures()
tile.naturalWonder = wonder.name
setBaseTerrain(tile, wonder.turnsInto ?: tile.baseTerrain)
for (civ in tile.tileMap.gameInfo.civilizations) {
if (wonder.name in civ.naturalWonders) continue
if (civ.isDefeated() || civ.isBarbarian() || civ.isSpectator()) continue
if (!civ.hasExplored(tile)) continue
civ.cache.discoverNaturalWonders()
civ.updateStatsForNextTurn()
}
return DevConsoleResponse.OK
}
private fun getTerrainFeature(console: DevConsolePopup, param: String) =
console.gameInfo.ruleset.terrains.values.asSequence()
.filter { it.type == TerrainType.TerrainFeature }.findCliInput(param)