mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-21 13:18:56 +07:00
Added 'for [amount] movement' unit action modifier
This commit is contained in:
@ -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()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user