diff --git a/core/src/com/unciv/ui/screens/devconsole/DevConsoleCommand.kt b/core/src/com/unciv/ui/screens/devconsole/DevConsoleCommand.kt index 0969d337e1..8d859cb005 100644 --- a/core/src/com/unciv/ui/screens/devconsole/DevConsoleCommand.kt +++ b/core/src/com/unciv/ui/screens/devconsole/DevConsoleCommand.kt @@ -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) -> DevConsoleResponse) : ConsoleCommand { +class ConsoleAction(val format: String, val action: (console: DevConsolePopup, params: List) -> DevConsoleResponse) : ConsoleCommand { override fun handle(console: DevConsolePopup, params: List): 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){ class ConsoleUnitCommands : ConsoleCommandNode { override val subcommands = hashMapOf( - "add" to ConsoleAction { console, params -> - validateFormat("unit add ", params) + "add" to ConsoleAction("unit add ") { 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 ", params) + "addpromotion" to ConsoleAction("unit addpromotion ") { 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 ", params) + "removepromotion" to ConsoleAction("unit removepromotion ") { 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 ", params) + "setmovement" to ConsoleAction("unit setmovement ") { 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( - "add" to ConsoleAction { console, params -> - validateFormat("city add ", params) + "add" to ConsoleAction("city add ") { 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 ", params) + "setpop" to ConsoleAction("city setpop ") { 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 ", params) + "addtile" to ConsoleAction("city addtile ") { 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 <±pressure>", params) + "religion" to ConsoleAction("city religion <±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( - "setimprovement" to ConsoleAction { console, params -> - validateFormat("tile setimprovement [civName]", params) + "setimprovement" to ConsoleAction("tile setimprovement [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 ", params) + "addfeature" to ConsoleAction("tile addfeature ") { 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 ", params) + "removefeature" to ConsoleAction("tile addfeature ") { 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( - "addstat" to ConsoleAction { console, params -> + "addstat" to ConsoleAction("civ addstat [civ] ") { console, params -> var statPos = 0 - validateFormat("civ addstat [civ] ", 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 ", params) + "setplayertype" to ConsoleAction("civ setplayertype ") { 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 ", params) + "revealmap" to ConsoleAction("civ revealmap ") { 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 <\"trigger\">", params) + "activatetrigger" to ConsoleAction("civ activatetrigger <\"trigger\">") { console, params -> val civ = console.getCivByName(params[0]) val unique = Unique(params[1]) if (unique.type == null) throw ConsoleErrorException("Unrecognized trigger")