mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04:00
Added 'for [amount] movement' unit action modifier
This commit is contained in:
parent
085c5d73e8
commit
06fa2c2378
@ -98,7 +98,7 @@ enum class UnitActionType(
|
||||
Repair(Constants.repair,
|
||||
{ ImageGetter.getUnitActionPortrait("Repair") }, 'r', UncivSound.Construction),
|
||||
Create("Create",
|
||||
null, 'i', UncivSound.Chimes),
|
||||
null, 'i', false, UncivSound.Chimes),
|
||||
HurryResearch("{Hurry Research} (${Fonts.death})",
|
||||
{ ImageGetter.getUnitActionPortrait("HurryResearch") }, 'g', UncivSound.Chimes),
|
||||
StartGoldenAge("Start Golden Age",
|
||||
|
@ -506,6 +506,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
|
||||
///////////////////////////////////////// region UNIT ACTION MODIFIERS /////////////////////////////////////////
|
||||
|
||||
UnitActionConsumeUnit("by consuming this unit", UniqueTarget.UnitActionModifier),
|
||||
UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier),
|
||||
|
||||
// endregion
|
||||
|
||||
|
@ -483,6 +483,9 @@ object UnitActions {
|
||||
unitTile.stopWorkingOnImprovement()
|
||||
improvement.handleImprovementCompletion(unit)
|
||||
|
||||
// without this the world screen won't the improvement because it isn't the 'last seen improvement'
|
||||
unit.civ.cache.updateViewableTiles()
|
||||
|
||||
if (unique.type == UniqueType.ConstructImprovementConsumingUnit) unit.consume()
|
||||
else activateSideEffects(unit, unique)
|
||||
}.takeIf {
|
||||
@ -680,21 +683,29 @@ object UnitActions {
|
||||
)
|
||||
}
|
||||
|
||||
fun getMovementPointsToUse(actionUnique: Unique): Int {
|
||||
val movementCost = actionUnique.conditionals.filter { it.type == UniqueType.UnitActionMovementCost }.minOfOrNull { it.params[0].toInt() }
|
||||
if (movementCost != null) return movementCost
|
||||
return 1
|
||||
}
|
||||
|
||||
fun activateSideEffects(unit: MapUnit, actionUnique: Unique){
|
||||
var conditionalsWithNoSideEffect = 0
|
||||
val movementCost = getMovementPointsToUse(actionUnique)
|
||||
unit.useMovementPoints(movementCost.toFloat())
|
||||
|
||||
for (conditional in actionUnique.conditionals){
|
||||
when (conditional.type){
|
||||
UniqueType.UnitActionConsumeUnit -> unit.consume()
|
||||
else -> conditionalsWithNoSideEffect++
|
||||
else -> continue
|
||||
}
|
||||
}
|
||||
if (conditionalsWithNoSideEffect == actionUnique.conditionals.size)
|
||||
unit.useMovementPoints(1f)
|
||||
}
|
||||
|
||||
fun getSideEffectString(actionUnique: Unique): String {
|
||||
val effects = ArrayList<String>()
|
||||
if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit }) effects += Fonts.death.toString()
|
||||
else effects += getMovementPointsToUse(actionUnique).toString() + Fonts.movement
|
||||
|
||||
return if (effects.isEmpty()) ""
|
||||
else "(${effects.joinToString { it.tr() }})"
|
||||
}
|
||||
|
@ -8,12 +8,12 @@ import com.unciv.UncivGame
|
||||
import com.unciv.logic.map.mapunit.MapUnit
|
||||
import com.unciv.models.UnitAction
|
||||
import com.unciv.models.UnitActionType
|
||||
import com.unciv.ui.images.IconTextButton
|
||||
import com.unciv.ui.components.KeyCharAndCode
|
||||
import com.unciv.ui.components.UncivTooltip.Companion.addTooltip
|
||||
import com.unciv.ui.components.extensions.disable
|
||||
import com.unciv.ui.components.extensions.keyShortcuts
|
||||
import com.unciv.ui.components.extensions.onActivation
|
||||
import com.unciv.ui.images.IconTextButton
|
||||
import com.unciv.ui.screens.worldscreen.WorldScreen
|
||||
|
||||
class UnitActionsTable(val worldScreen: WorldScreen) : Table() {
|
||||
@ -53,7 +53,7 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table() {
|
||||
// overlay, since the user definitely wants to interact with the new unit.
|
||||
worldScreen.mapHolder.removeUnitActionOverlay()
|
||||
if (UncivGame.Current.settings.autoUnitCycle
|
||||
&& (unitAction.type.isSkippingToNextUnit || unit.currentMovement == 0f)) {
|
||||
&& (unit.isDestroyed || unitAction.type.isSkippingToNextUnit || unit.currentMovement == 0f)) {
|
||||
worldScreen.switchToNextUnit()
|
||||
}
|
||||
}
|
||||
|
@ -1978,6 +1978,11 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
|
||||
??? example "<by consuming this unit>"
|
||||
Applicable to: UnitActionModifier
|
||||
|
||||
??? example "<for [amount] movement>"
|
||||
Example: "<for [3] movement>"
|
||||
|
||||
Applicable to: UnitActionModifier
|
||||
|
||||
|
||||
*[action]: An action that a unit can perform. Currently, there are only two actions part of this: 'Spread Religion' and 'Remove Foreign religions from your own cities'
|
||||
*[amount]: This indicates a whole number, possibly with a + or - sign, such as `2`, `+13`, or `-3`.
|
||||
|
Loading…
x
Reference in New Issue
Block a user