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))
unit.movement.headTowards(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.CreateImprovement to UnitActionsFromUniques::getImprovementCreationActions,
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> {
@ -59,10 +61,6 @@ object UnitActions {
for (getActionsFunction in actionTypeToFunctions.values)
actionList.addAll(getActionsFunction(unit, tile))
// Determined by unit uniques
UnitActionsFromUniques.addTriggerUniqueActions(unit, actionList)
UnitActionsFromUniques.addAddInCapitalAction(unit, actionList, tile)
// General actions
addAutomateAction(unit, actionList, true)
if (unit.isMoving()) {
@ -293,11 +291,10 @@ object UnitActions {
private fun addAutomateAction(
unit: MapUnit,
actionList: ArrayList<UnitAction>,
showingAdditionalActions: Boolean
showingPrimaryActions: 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)
val shouldAutomationBePrimaryAction = unit.cache.hasUniqueToBuildImprovements || unit.hasUnique(UniqueType.AutomationPrimaryAction)
if (shouldAutomationBePrimaryAction != showingPrimaryActions)
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()) {
// not a unit action
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue
@ -175,16 +175,16 @@ object UnitActionsFromUniques {
else unique.text.removeConditionals()
val title = UnitActionModifiers.actionTextWithSideEffects(baseTitle, unique, unit)
val unitAction = UnitAction(type = UnitActionType.TriggerUnique, title) {
yield(UnitAction(UnitActionType.TriggerUnique, title) {
UniqueTriggerActivation.triggerUnitwideUnique(unique, unit)
UnitActionModifiers.activateSideEffects(unit, unique)
}
actionList += unitAction
})
}
}
}.asIterable()
fun getAddInCapitalAction(unit: MapUnit, tile: Tile): UnitAction {
return UnitAction(UnitActionType.AddInCapital,
fun getAddInCapitalActions(unit: MapUnit, tile: Tile): List<UnitAction> {
if (!unit.hasUnique(UniqueType.AddInCapital)) return listOf()
return listOf(UnitAction(UnitActionType.AddInCapital,
title = "Add to [${
unit.getMatchingUniques(UniqueType.AddInCapital).first().params[0]
}]",
@ -195,15 +195,9 @@ object UnitActionsFromUniques {
tile.isCityCenter() && tile.getCity()!!
.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 {
val waterImprovementAction = getWaterImprovementAction(unit, tile)
if (waterImprovementAction != null) yield(waterImprovementAction)