All units can be automated

Modders can choose which units get it as a primary action
This commit is contained in:
Yair Morgenstern
2023-03-13 16:55:50 +02:00
parent 10caf8e93e
commit cd8b68253b
6 changed files with 22 additions and 11 deletions

View File

@ -7,7 +7,7 @@
"name": "Worker", "name": "Worker",
"unitType": "Civilian", "unitType": "Civilian",
"movement": 2, "movement": 2,
"uniques": ["Can build [Land] improvements on tiles"], "uniques": ["Can build [Land] improvements on tiles", "Automation is a primary action"],
"cost": 70 "cost": 70
}, },
{ {
@ -157,7 +157,8 @@
"movement": 4, "movement": 4,
"cost": 30, "cost": 30,
"requiredTech": "Sailing", "requiredTech": "Sailing",
"uniques": ["Cannot enter ocean tiles <before discovering [Astronomy]>", "May create improvements on water resources", "Uncapturable"] "uniques": ["Cannot enter ocean tiles <before discovering [Astronomy]>", "May create improvements on water resources",
"Uncapturable", "Automation is a primary action"]
}, },
{ {
"name": "Trireme", "name": "Trireme",

View File

@ -7,7 +7,7 @@
"name": "Worker", "name": "Worker",
"unitType": "Civilian", "unitType": "Civilian",
"movement": 2, "movement": 2,
"uniques": ["Can build [Land] improvements on tiles"], "uniques": ["Can build [Land] improvements on tiles", "Automation is a primary action"],
"cost": 70 "cost": 70
}, },
{ {
@ -143,7 +143,8 @@
"movement": 4, "movement": 4,
"cost": 30, "cost": 30,
"requiredTech": "Sailing", "requiredTech": "Sailing",
"uniques": ["Cannot enter ocean tiles <before discovering [Astronomy]>", "May create improvements on water resources", "Uncapturable"] "uniques": ["Cannot enter ocean tiles <before discovering [Astronomy]>", "May create improvements on water resources",
"Uncapturable", "Automation is a primary action"]
}, },
{ {
"name": "Trireme", "name": "Trireme",

View File

@ -4,7 +4,6 @@ import com.badlogic.gdx.math.Vector2
import com.unciv.Constants import com.unciv.Constants
import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.logic.IsPartOfGameInfoSerialization
import com.unciv.logic.automation.unit.UnitAutomation 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.Battle
import com.unciv.logic.battle.MapUnitCombatant import com.unciv.logic.battle.MapUnitCombatant
import com.unciv.logic.city.City import com.unciv.logic.city.City
@ -478,7 +477,7 @@ class MapUnit : IsPartOfGameInfoSerialization {
return return
} }
if (isAutomated()) WorkerAutomation.automateWorkerAction(this) if (isAutomated()) UnitAutomation.automateUnitMoves(this)
if (isExploring()) UnitAutomation.automatedExplore(this) if (isExploring()) UnitAutomation.automatedExplore(this)
} }

View File

@ -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), 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), CanTransform("Can transform to [unit]", UniqueTarget.Unit),
AutomationPrimaryAction("Automation is a primary action", UniqueTarget.Unit, flags = UniqueFlag.setOfHiddenToUsers),
// Strength bonuses // Strength bonuses
Strength("[relativeAmount]% Strength", UniqueTarget.Unit, UniqueTarget.Global), Strength("[relativeAmount]% Strength", UniqueTarget.Unit, UniqueTarget.Global),
StrengthNearCapital("[relativeAmount]% Strength decreasing with distance from the capital", UniqueTarget.Unit, UniqueTarget.Global), StrengthNearCapital("[relativeAmount]% Strength decreasing with distance from the capital", UniqueTarget.Unit, UniqueTarget.Global),

View File

@ -4,7 +4,6 @@ import com.unciv.Constants
import com.unciv.GUI import com.unciv.GUI
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.automation.unit.UnitAutomation 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.Civilization
import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationCategory
import com.unciv.logic.civilization.NotificationIcon import com.unciv.logic.civilization.NotificationIcon
@ -55,7 +54,8 @@ object UnitActions {
UnitActionsReligion.addEnhanceReligionAction(unit, actionList) UnitActionsReligion.addEnhanceReligionAction(unit, actionList)
actionList += getImprovementConstructionActions(unit, tile) actionList += getImprovementConstructionActions(unit, tile)
UnitActionsReligion.addActionsWithLimitedUses(unit, actionList, tile) UnitActionsReligion.addActionsWithLimitedUses(unit, actionList, tile)
addAutomateBuildingImprovementsAction(unit, actionList)
addAutomateAction(unit, actionList, true)
addTriggerUniqueActions(unit, actionList) addTriggerUniqueActions(unit, actionList)
addAddInCapitalAction(unit, actionList, tile) addAddInCapitalAction(unit, actionList, tile)
@ -88,6 +88,7 @@ object UnitActions {
addSleepActions(actionList, unit, true) addSleepActions(actionList, unit, true)
addFortifyActions(actionList, unit, true) addFortifyActions(actionList, unit, true)
addAutomateAction(unit, actionList, false)
addSwapAction(unit, actionList) addSwapAction(unit, actionList)
addDisbandAction(actionList, unit) addDisbandAction(actionList, unit)
@ -437,15 +438,19 @@ object UnitActions {
} }
} }
private fun addAutomateBuildingImprovementsAction(unit: MapUnit, actionList: ArrayList<UnitAction>) { private fun addAutomateAction(unit: MapUnit, actionList: ArrayList<UnitAction>, showingAdditionalActions:Boolean) {
if (!unit.cache.hasUniqueToBuildImprovements) return
// 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 if (unit.isAutomated()) return
actionList += UnitAction(UnitActionType.Automate, actionList += UnitAction(UnitActionType.Automate,
isCurrentAction = unit.isAutomated(), isCurrentAction = unit.isAutomated(),
action = { action = {
unit.action = UnitActionType.Automate.value unit.action = UnitActionType.Automate.value
WorkerAutomation.automateWorkerAction(unit) UnitAutomation.automateUnitMoves(unit)
}.takeIf { unit.currentMovement > 0 } }.takeIf { unit.currentMovement > 0 }
) )
} }

View File

@ -1105,6 +1105,9 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
Applicable to: Unit Applicable to: Unit
??? example "Automation is a primary action"
Applicable to: Unit
??? example "[relativeAmount]% Strength for enemy [combatantFilter] units in adjacent [tileFilter] tiles" ??? example "[relativeAmount]% Strength for enemy [combatantFilter] units in adjacent [tileFilter] tiles"
Example: "[+20]% Strength for enemy [City] units in adjacent [Farm] tiles" Example: "[+20]% Strength for enemy [City] units in adjacent [Farm] tiles"