mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-05 15:59:50 +07:00
Console: Format is inherent part of console action
This commit is contained in:
@ -17,9 +17,10 @@ interface ConsoleCommand {
|
||||
class ConsoleHintException(val hint:String):Exception()
|
||||
class ConsoleErrorException(val error:String):Exception()
|
||||
|
||||
class ConsoleAction(val action: (console: DevConsolePopup, params: List<String>) -> DevConsoleResponse) : ConsoleCommand {
|
||||
class ConsoleAction(val format: String, val action: (console: DevConsolePopup, params: List<String>) -> DevConsoleResponse) : ConsoleCommand {
|
||||
override fun handle(console: DevConsolePopup, params: List<String>): DevConsoleResponse {
|
||||
return try {
|
||||
validateFormat(format, params)
|
||||
action(console, params)
|
||||
} catch (hintException: ConsoleHintException) {
|
||||
DevConsoleResponse.hint(hintException.hint)
|
||||
@ -79,8 +80,7 @@ fun validateFormat(format: String, params:List<String>){
|
||||
class ConsoleUnitCommands : ConsoleCommandNode {
|
||||
override val subcommands = hashMapOf<String, ConsoleCommand>(
|
||||
|
||||
"add" to ConsoleAction { console, params ->
|
||||
validateFormat("unit add <civName> <unitName>", params)
|
||||
"add" to ConsoleAction("unit add <civName> <unitName>") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val civ = console.getCivByName(params[0])
|
||||
val baseUnit = console.gameInfo.ruleset.units.values.firstOrNull { it.name.toCliInput() == params[1] }
|
||||
@ -89,15 +89,13 @@ class ConsoleUnitCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"remove" to ConsoleAction { console, params ->
|
||||
validateFormat("unit remove", params)
|
||||
"remove" to ConsoleAction("unit remove") { console, params ->
|
||||
val unit = console.getSelectedUnit()
|
||||
unit.destroy()
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"addpromotion" to ConsoleAction { console, params ->
|
||||
validateFormat("unit addpromotion <promotionName>", params)
|
||||
"addpromotion" to ConsoleAction("unit addpromotion <promotionName>") { console, params ->
|
||||
val unit = console.getSelectedUnit()
|
||||
val promotion = console.gameInfo.ruleset.unitPromotions.values.firstOrNull { it.name.toCliInput() == params[0] }
|
||||
?: throw ConsoleErrorException("Unknown promotion")
|
||||
@ -105,8 +103,7 @@ class ConsoleUnitCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"removepromotion" to ConsoleAction { console, params ->
|
||||
validateFormat("unit removepromotion <promotionName>", params)
|
||||
"removepromotion" to ConsoleAction("unit removepromotion <promotionName>") { console, params ->
|
||||
val unit = console.getSelectedUnit()
|
||||
val promotion = unit.promotions.getPromotions().firstOrNull { it.name.toCliInput() == params[0] }
|
||||
?: throw ConsoleErrorException("Promotion not found on unit")
|
||||
@ -117,8 +114,7 @@ class ConsoleUnitCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"setmovement" to ConsoleAction { console, params ->
|
||||
validateFormat("unit setmovement <amount>", params)
|
||||
"setmovement" to ConsoleAction("unit setmovement <amount>") { console, params ->
|
||||
val movement = params[0].toFloatOrNull()
|
||||
if (movement == null || movement < 0) throw ConsoleErrorException("Invalid number")
|
||||
val unit = console.getSelectedUnit()
|
||||
@ -131,8 +127,7 @@ class ConsoleUnitCommands : ConsoleCommandNode {
|
||||
class ConsoleCityCommands : ConsoleCommandNode {
|
||||
override val subcommands = hashMapOf<String, ConsoleCommand>(
|
||||
|
||||
"add" to ConsoleAction { console, params ->
|
||||
validateFormat("city add <civName>", params)
|
||||
"add" to ConsoleAction("city add <civName>") { console, params ->
|
||||
val civ = console.getCivByName(params[0])
|
||||
val selectedTile = console.getSelectedTile()
|
||||
if (selectedTile.isCityCenter())
|
||||
@ -141,15 +136,13 @@ class ConsoleCityCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"remove" to ConsoleAction { console, params ->
|
||||
validateFormat("city remove", params)
|
||||
"remove" to ConsoleAction("city remove") { console, params ->
|
||||
val city = console.getSelectedCity()
|
||||
city.destroyCity(overrideSafeties = true)
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"setpop" to ConsoleAction { console, params ->
|
||||
validateFormat("city setpop <amount>", params)
|
||||
"setpop" to ConsoleAction("city setpop <amount>") { console, params ->
|
||||
val city = console.getSelectedCity()
|
||||
val newPop = console.getInt(params[0])
|
||||
if (newPop < 1) throw ConsoleErrorException("Population must be at least 1")
|
||||
@ -157,8 +150,7 @@ class ConsoleCityCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"addtile" to ConsoleAction { console, params ->
|
||||
validateFormat("city addtile <cityName>", params)
|
||||
"addtile" to ConsoleAction("city addtile <cityName>") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val city = console.getCity(params[0])
|
||||
if (selectedTile.neighbors.none { it.getCity() == city })
|
||||
@ -168,16 +160,14 @@ class ConsoleCityCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"removetile" to ConsoleAction { console, params ->
|
||||
validateFormat("city removetile", params)
|
||||
"removetile" to ConsoleAction("city removetile") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val city = console.getSelectedCity()
|
||||
city.expansion.relinquishOwnership(selectedTile)
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"religion" to ConsoleAction { console, params ->
|
||||
validateFormat("city religion <name> <±pressure>", params)
|
||||
"religion" to ConsoleAction("city religion <name> <±pressure>") { console, params ->
|
||||
val city = console.getSelectedCity()
|
||||
val religion = city.civ.gameInfo.religions.keys.firstOrNull { it.toCliInput() == params[0] }
|
||||
?: throw ConsoleErrorException("'${params[0]}' is not a known religion")
|
||||
@ -192,8 +182,7 @@ class ConsoleCityCommands : ConsoleCommandNode {
|
||||
class ConsoleTileCommands: ConsoleCommandNode {
|
||||
override val subcommands = hashMapOf<String, ConsoleCommand>(
|
||||
|
||||
"setimprovement" to ConsoleAction { console, params ->
|
||||
validateFormat("tile setimprovement <improvementName> [civName]", params)
|
||||
"setimprovement" to ConsoleAction("tile setimprovement <improvementName> [civName]") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val improvement = console.gameInfo.ruleset.tileImprovements.values.firstOrNull {
|
||||
it.name.toCliInput() == params[0]
|
||||
@ -206,15 +195,13 @@ class ConsoleTileCommands: ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"removeimprovement" to ConsoleAction { console, params ->
|
||||
validateFormat("tile removeimprovement", params)
|
||||
"removeimprovement" to ConsoleAction("tile removeimprovement") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
selectedTile.improvementFunctions.changeImprovement(null)
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"addfeature" to ConsoleAction { console, params ->
|
||||
validateFormat("tile addfeature <featureName>", params)
|
||||
"addfeature" to ConsoleAction("tile addfeature <featureName>") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val feature = console.gameInfo.ruleset.terrains.values
|
||||
.firstOrNull { it.type == TerrainType.TerrainFeature && it.name.toCliInput() == params[0] }
|
||||
@ -223,8 +210,7 @@ class ConsoleTileCommands: ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"removefeature" to ConsoleAction { console, params ->
|
||||
validateFormat("tile addfeature <featureName>", params)
|
||||
"removefeature" to ConsoleAction("tile addfeature <featureName>") { console, params ->
|
||||
val selectedTile = console.getSelectedTile()
|
||||
val feature = console.gameInfo.ruleset.terrains.values
|
||||
.firstOrNull { it.type == TerrainType.TerrainFeature && it.name.toCliInput() == params[0] }
|
||||
@ -237,9 +223,8 @@ class ConsoleTileCommands: ConsoleCommandNode {
|
||||
|
||||
class ConsoleCivCommands : ConsoleCommandNode {
|
||||
override val subcommands = hashMapOf<String, ConsoleCommand>(
|
||||
"addstat" to ConsoleAction { console, params ->
|
||||
"addstat" to ConsoleAction("civ addstat [civ] <stat> <amount>") { console, params ->
|
||||
var statPos = 0
|
||||
validateFormat("civ addstat [civ] <stat> <amount>", params)
|
||||
val civ = if (params.size == 2) console.screen.selectedCiv
|
||||
else {
|
||||
statPos++
|
||||
@ -254,8 +239,7 @@ class ConsoleCivCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"setplayertype" to ConsoleAction { console, params ->
|
||||
validateFormat("civ setplayertype <civName> <ai/human>", params)
|
||||
"setplayertype" to ConsoleAction("civ setplayertype <civName> <ai/human>") { console, params ->
|
||||
val civ = console.getCivByName(params[0])
|
||||
val playerType = PlayerType.values().firstOrNull { it.name.lowercase() == params[1].lowercase() }
|
||||
?: throw ConsoleErrorException("Invalid player type, valid options are 'ai' or 'human'")
|
||||
@ -263,16 +247,14 @@ class ConsoleCivCommands : ConsoleCommandNode {
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"revealmap" to ConsoleAction { console, params ->
|
||||
validateFormat("civ revealmap <civName>", params)
|
||||
"revealmap" to ConsoleAction("civ revealmap <civName>") { console, params ->
|
||||
val civ = console.getCivByName(params[0])
|
||||
civ.gameInfo.tileMap.values.asSequence()
|
||||
.forEach { it.setExplored(civ, true) }
|
||||
DevConsoleResponse.OK
|
||||
},
|
||||
|
||||
"activatetrigger" to ConsoleAction { console, params ->
|
||||
validateFormat("civ activatetrigger <civName> <\"trigger\">", params)
|
||||
"activatetrigger" to ConsoleAction("civ activatetrigger <civName> <\"trigger\">") { console, params ->
|
||||
val civ = console.getCivByName(params[0])
|
||||
val unique = Unique(params[1])
|
||||
if (unique.type == null) throw ConsoleErrorException("Unrecognized trigger")
|
||||
|
Reference in New Issue
Block a user