Standardized 'add in capital' action

This commit is contained in:
Yair Morgenstern
2023-12-07 22:41:27 +02:00
parent 612545eec5
commit d4f53bf813
3 changed files with 15 additions and 24 deletions

View File

@ -336,7 +336,7 @@ object SpecificUnitAutomation {
if (unit.movement.canReach(capitalTile)) if (unit.movement.canReach(capitalTile))
unit.movement.headTowards(capitalTile) unit.movement.headTowards(capitalTile)
if (unit.getTile() == capitalTile) { if (unit.getTile() == capitalTile) {
UnitActionsFromUniques.getAddInCapitalAction(unit, capitalTile).action?.invoke() UnitActions.invokeUnitAction(unit, UnitActionType.AddInCapital)
} }
} }

View File

@ -49,7 +49,9 @@ object UnitActions {
UnitActionType.EnhanceReligion to UnitActionsReligion::getEnhanceReligionActions, UnitActionType.EnhanceReligion to UnitActionsReligion::getEnhanceReligionActions,
UnitActionType.CreateImprovement to UnitActionsFromUniques::getImprovementCreationActions, UnitActionType.CreateImprovement to UnitActionsFromUniques::getImprovementCreationActions,
UnitActionType.SpreadReligion to UnitActionsReligion::addSpreadReligionActions, UnitActionType.SpreadReligion to UnitActionsReligion::addSpreadReligionActions,
UnitActionType.RemoveHeresy to UnitActionsReligion::getRemoveHeresyActions UnitActionType.RemoveHeresy to UnitActionsReligion::getRemoveHeresyActions,
UnitActionType.TriggerUnique to UnitActionsFromUniques::getTriggerUniqueActions,
UnitActionType.AddInCapital to UnitActionsFromUniques::getAddInCapitalActions
) )
private fun getNormalActions(unit: MapUnit): List<UnitAction> { private fun getNormalActions(unit: MapUnit): List<UnitAction> {
@ -59,10 +61,6 @@ object UnitActions {
for (getActionsFunction in actionTypeToFunctions.values) for (getActionsFunction in actionTypeToFunctions.values)
actionList.addAll(getActionsFunction(unit, tile)) actionList.addAll(getActionsFunction(unit, tile))
// Determined by unit uniques
UnitActionsFromUniques.addTriggerUniqueActions(unit, actionList)
UnitActionsFromUniques.addAddInCapitalAction(unit, actionList, tile)
// General actions // General actions
addAutomateAction(unit, actionList, true) addAutomateAction(unit, actionList, true)
if (unit.isMoving()) { if (unit.isMoving()) {
@ -293,11 +291,10 @@ object UnitActions {
private fun addAutomateAction( private fun addAutomateAction(
unit: MapUnit, unit: MapUnit,
actionList: ArrayList<UnitAction>, actionList: ArrayList<UnitAction>,
showingAdditionalActions: Boolean showingPrimaryActions: Boolean
) { ) {
val shouldAutomationBePrimaryAction = unit.cache.hasUniqueToBuildImprovements || unit.hasUnique(UniqueType.AutomationPrimaryAction)
// If either of these are true it goes in primary actions, else in additional actions if (shouldAutomationBePrimaryAction != showingPrimaryActions)
if ((unit.hasUnique(UniqueType.AutomationPrimaryAction) || unit.cache.hasUniqueToBuildImprovements) != showingAdditionalActions)
return return
if (unit.isAutomated()) return if (unit.isAutomated()) return

View File

@ -159,7 +159,7 @@ object UnitActionsFromUniques {
} }
)) ))
} }
fun addTriggerUniqueActions(unit: MapUnit, actionList: ArrayList<UnitAction>) { fun getTriggerUniqueActions(unit: MapUnit, tile: Tile) = sequence {
for (unique in unit.getUniques()) { for (unique in unit.getUniques()) {
// not a unit action // not a unit action
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue
@ -175,16 +175,16 @@ object UnitActionsFromUniques {
else unique.text.removeConditionals() else unique.text.removeConditionals()
val title = UnitActionModifiers.actionTextWithSideEffects(baseTitle, unique, unit) val title = UnitActionModifiers.actionTextWithSideEffects(baseTitle, unique, unit)
val unitAction = UnitAction(type = UnitActionType.TriggerUnique, title) { yield(UnitAction(UnitActionType.TriggerUnique, title) {
UniqueTriggerActivation.triggerUnitwideUnique(unique, unit) UniqueTriggerActivation.triggerUnitwideUnique(unique, unit)
UnitActionModifiers.activateSideEffects(unit, unique) UnitActionModifiers.activateSideEffects(unit, unique)
} })
actionList += unitAction
} }
} }.asIterable()
fun getAddInCapitalAction(unit: MapUnit, tile: Tile): UnitAction { fun getAddInCapitalActions(unit: MapUnit, tile: Tile): List<UnitAction> {
return UnitAction(UnitActionType.AddInCapital, if (!unit.hasUnique(UniqueType.AddInCapital)) return listOf()
return listOf(UnitAction(UnitActionType.AddInCapital,
title = "Add to [${ title = "Add to [${
unit.getMatchingUniques(UniqueType.AddInCapital).first().params[0] unit.getMatchingUniques(UniqueType.AddInCapital).first().params[0]
}]", }]",
@ -195,15 +195,9 @@ object UnitActionsFromUniques {
tile.isCityCenter() && tile.getCity()!! tile.isCityCenter() && tile.getCity()!!
.isCapital() && tile.getCity()!!.civ == unit.civ .isCapital() && tile.getCity()!!.civ == unit.civ
} }
) ))
} }
fun addAddInCapitalAction(unit: MapUnit, actionList: ArrayList<UnitAction>, tile: Tile) {
if (!unit.hasUnique(UniqueType.AddInCapital)) return
actionList += getAddInCapitalAction(unit, tile)
}
fun getImprovementCreationActions(unit: MapUnit, tile: Tile) = sequence { fun getImprovementCreationActions(unit: MapUnit, tile: Tile) = sequence {
val waterImprovementAction = getWaterImprovementAction(unit, tile) val waterImprovementAction = getWaterImprovementAction(unit, tile)
if (waterImprovementAction != null) yield(waterImprovementAction) if (waterImprovementAction != null) yield(waterImprovementAction)