From cd8b68253b847f42d818f5d42f75bfbda45e96f9 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 13 Mar 2023 16:55:50 +0200 Subject: [PATCH] All units can be automated Modders can choose which units get it as a primary action --- .../assets/jsons/Civ V - Gods & Kings/Units.json | 5 +++-- android/assets/jsons/Civ V - Vanilla/Units.json | 5 +++-- core/src/com/unciv/logic/map/mapunit/MapUnit.kt | 3 +-- .../com/unciv/models/ruleset/unique/UniqueType.kt | 2 ++ .../worldscreen/unit/actions/UnitActions.kt | 15 ++++++++++----- docs/Modders/uniques.md | 3 +++ 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Units.json b/android/assets/jsons/Civ V - Gods & Kings/Units.json index 14cc7539d8..f766810b9a 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Units.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Units.json @@ -7,7 +7,7 @@ "name": "Worker", "unitType": "Civilian", "movement": 2, - "uniques": ["Can build [Land] improvements on tiles"], + "uniques": ["Can build [Land] improvements on tiles", "Automation is a primary action"], "cost": 70 }, { @@ -157,7 +157,8 @@ "movement": 4, "cost": 30, "requiredTech": "Sailing", - "uniques": ["Cannot enter ocean tiles ", "May create improvements on water resources", "Uncapturable"] + "uniques": ["Cannot enter ocean tiles ", "May create improvements on water resources", + "Uncapturable", "Automation is a primary action"] }, { "name": "Trireme", diff --git a/android/assets/jsons/Civ V - Vanilla/Units.json b/android/assets/jsons/Civ V - Vanilla/Units.json index 5f03e53d67..8ef7308d82 100644 --- a/android/assets/jsons/Civ V - Vanilla/Units.json +++ b/android/assets/jsons/Civ V - Vanilla/Units.json @@ -7,7 +7,7 @@ "name": "Worker", "unitType": "Civilian", "movement": 2, - "uniques": ["Can build [Land] improvements on tiles"], + "uniques": ["Can build [Land] improvements on tiles", "Automation is a primary action"], "cost": 70 }, { @@ -143,7 +143,8 @@ "movement": 4, "cost": 30, "requiredTech": "Sailing", - "uniques": ["Cannot enter ocean tiles ", "May create improvements on water resources", "Uncapturable"] + "uniques": ["Cannot enter ocean tiles ", "May create improvements on water resources", + "Uncapturable", "Automation is a primary action"] }, { "name": "Trireme", diff --git a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt index 0278267dcc..099ade481c 100644 --- a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt +++ b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt @@ -4,7 +4,6 @@ import com.badlogic.gdx.math.Vector2 import com.unciv.Constants import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.logic.automation.unit.UnitAutomation -import com.unciv.logic.automation.unit.WorkerAutomation import com.unciv.logic.battle.Battle import com.unciv.logic.battle.MapUnitCombatant import com.unciv.logic.city.City @@ -478,7 +477,7 @@ class MapUnit : IsPartOfGameInfoSerialization { return } - if (isAutomated()) WorkerAutomation.automateWorkerAction(this) + if (isAutomated()) UnitAutomation.automateUnitMoves(this) if (isExploring()) UnitAutomation.automatedExplore(this) } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index fc0297bcd6..2477a0a84f 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -375,6 +375,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: CanTradeWithCityStateForGoldAndInfluence("Can undertake a trade mission with City-State, giving a large sum of gold and [amount] Influence", UniqueTarget.Unit), CanTransform("Can transform to [unit]", UniqueTarget.Unit), + AutomationPrimaryAction("Automation is a primary action", UniqueTarget.Unit, flags = UniqueFlag.setOfHiddenToUsers), + // Strength bonuses Strength("[relativeAmount]% Strength", UniqueTarget.Unit, UniqueTarget.Global), StrengthNearCapital("[relativeAmount]% Strength decreasing with distance from the capital", UniqueTarget.Unit, UniqueTarget.Global), diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 27c76ba3a7..8d6c24c606 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -4,7 +4,6 @@ import com.unciv.Constants import com.unciv.GUI import com.unciv.UncivGame import com.unciv.logic.automation.unit.UnitAutomation -import com.unciv.logic.automation.unit.WorkerAutomation import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationIcon @@ -55,7 +54,8 @@ object UnitActions { UnitActionsReligion.addEnhanceReligionAction(unit, actionList) actionList += getImprovementConstructionActions(unit, tile) UnitActionsReligion.addActionsWithLimitedUses(unit, actionList, tile) - addAutomateBuildingImprovementsAction(unit, actionList) + + addAutomateAction(unit, actionList, true) addTriggerUniqueActions(unit, actionList) addAddInCapitalAction(unit, actionList, tile) @@ -88,6 +88,7 @@ object UnitActions { addSleepActions(actionList, unit, true) addFortifyActions(actionList, unit, true) + addAutomateAction(unit, actionList, false) addSwapAction(unit, actionList) addDisbandAction(actionList, unit) @@ -437,15 +438,19 @@ object UnitActions { } } - private fun addAutomateBuildingImprovementsAction(unit: MapUnit, actionList: ArrayList) { - if (!unit.cache.hasUniqueToBuildImprovements) return + private fun addAutomateAction(unit: MapUnit, actionList: ArrayList, showingAdditionalActions:Boolean) { + + // If either of these are true it goes in primary actions, else in additional actions + if ((unit.hasUnique(UniqueType.AutomationPrimaryAction) || unit.cache.hasUniqueToBuildImprovements) != showingAdditionalActions) + return + if (unit.isAutomated()) return actionList += UnitAction(UnitActionType.Automate, isCurrentAction = unit.isAutomated(), action = { unit.action = UnitActionType.Automate.value - WorkerAutomation.automateWorkerAction(unit) + UnitAutomation.automateUnitMoves(unit) }.takeIf { unit.currentMovement > 0 } ) } diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index ae7a77ec79..1e9b388d9d 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -1105,6 +1105,9 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Unit +??? example "Automation is a primary action" + Applicable to: Unit + ??? example "[relativeAmount]% Strength for enemy [combatantFilter] units in adjacent [tileFilter] tiles" Example: "[+20]% Strength for enemy [City] units in adjacent [Farm] tiles"