mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-10 15:59:33 +07:00
Converted Great Person actions to new format
This commit is contained in:
@ -39,7 +39,11 @@ object UnitActions {
|
||||
UnitActionType.SetUp to UnitActionsFromUniques::getSetupActions,
|
||||
UnitActionType.FoundCity to UnitActionsFromUniques::getFoundCityActions,
|
||||
UnitActionType.ConstructImprovement to UnitActionsFromUniques::getBuildingImprovementsActions,
|
||||
UnitActionType.Repair to UnitActionsFromUniques::getRepairActions
|
||||
UnitActionType.Repair to UnitActionsFromUniques::getRepairActions,
|
||||
UnitActionType.HurryResearch to UnitActionsGreatPerson::getHurryResearchActions,
|
||||
UnitActionType.HurryWonder to UnitActionsGreatPerson::getHurryWonderActions,
|
||||
UnitActionType.HurryBuilding to UnitActionsGreatPerson::getHurryBuildingActions,
|
||||
UnitActionType.ConductTradeMission to UnitActionsGreatPerson::getConductTradeMissionActions
|
||||
)
|
||||
|
||||
private fun getNormalActions(unit: MapUnit): List<UnitAction> {
|
||||
@ -50,7 +54,6 @@ object UnitActions {
|
||||
actionList.addAll(getActionsFunction(unit, tile))
|
||||
|
||||
// Determined by unit uniques
|
||||
UnitActionsGreatPerson.addGreatPersonActions(unit, actionList, tile)
|
||||
UnitActionsReligion.addFoundReligionAction(unit, actionList)
|
||||
UnitActionsReligion.addEnhanceReligionAction(unit, actionList)
|
||||
UnitActionsFromUniques.addCreateWaterImprovements(unit, actionList)
|
||||
|
@ -13,27 +13,30 @@ import kotlin.math.min
|
||||
|
||||
object UnitActionsGreatPerson {
|
||||
|
||||
internal fun addGreatPersonActions(unit: MapUnit, actionList: ArrayList<UnitAction>, tile: Tile) {
|
||||
|
||||
if (unit.currentMovement <= 0) return
|
||||
for (unique in unit.getUniques()) when (unique.type) {
|
||||
UniqueType.CanHurryResearch -> {
|
||||
actionList += UnitAction(
|
||||
fun getHurryResearchActions(unit:MapUnit, tile: Tile) = sequence {
|
||||
for (unique in unit.getMatchingUniques(UniqueType.CanHurryResearch)){
|
||||
yield(UnitAction(
|
||||
UnitActionType.HurryResearch,
|
||||
action = {
|
||||
unit.civ.tech.addScience(unit.civ.tech.getScienceFromGreatScientist())
|
||||
unit.consume()
|
||||
}.takeIf { unit.civ.tech.currentTechnologyName() != null
|
||||
&& !unit.civ.tech.currentTechnology()!!.hasUnique(UniqueType.CannotBeHurried) }
|
||||
)
|
||||
}.takeIf {
|
||||
unit.currentMovement > 0
|
||||
&& unit.civ.tech.currentTechnologyName() != null
|
||||
&& !unit.civ.tech.currentTechnology()!!.hasUnique(UniqueType.CannotBeHurried)
|
||||
}
|
||||
UniqueType.CanSpeedupWonderConstruction -> {
|
||||
))
|
||||
}
|
||||
}.asIterable()
|
||||
|
||||
fun getHurryWonderActions(unit: MapUnit, tile: Tile) = sequence {
|
||||
for (unique in unit.getMatchingUniques(UniqueType.CanSpeedupWonderConstruction)) {
|
||||
val canHurryWonder =
|
||||
if (!tile.isCityCenter()) false
|
||||
else tile.getCity()!!.cityConstructions.isBuildingWonder()
|
||||
&& tile.getCity()!!.cityConstructions.canBeHurried()
|
||||
|
||||
actionList += UnitAction(
|
||||
yield(UnitAction(
|
||||
UnitActionType.HurryWonder,
|
||||
action = {
|
||||
tile.getCity()!!.cityConstructions.apply {
|
||||
@ -43,13 +46,15 @@ object UnitActionsGreatPerson {
|
||||
}
|
||||
|
||||
unit.consume()
|
||||
}.takeIf { canHurryWonder }
|
||||
)
|
||||
}.takeIf { unit.currentMovement > 0 && canHurryWonder }
|
||||
))
|
||||
}
|
||||
}.asIterable()
|
||||
|
||||
UniqueType.CanSpeedupConstruction -> {
|
||||
fun getHurryBuildingActions(unit:MapUnit, tile: Tile) = sequence {
|
||||
for (unique in unit.getMatchingUniques(UniqueType.CanSpeedupConstruction)) {
|
||||
if (!tile.isCityCenter()) {
|
||||
actionList += UnitAction(UnitActionType.HurryBuilding, action = null)
|
||||
yield(UnitAction(UnitActionType.HurryBuilding, action = null))
|
||||
continue
|
||||
}
|
||||
|
||||
@ -64,7 +69,7 @@ object UnitActionsGreatPerson {
|
||||
).toInt()
|
||||
if (productionPointsToAdd <= 0) continue
|
||||
|
||||
actionList += UnitAction(
|
||||
yield(UnitAction(
|
||||
UnitActionType.HurryBuilding,
|
||||
title = "Hurry Construction (+[$productionPointsToAdd]⚙)",
|
||||
action = {
|
||||
@ -74,15 +79,19 @@ object UnitActionsGreatPerson {
|
||||
}
|
||||
|
||||
unit.consume()
|
||||
}.takeIf { canHurryConstruction }
|
||||
)
|
||||
}.takeIf { unit.currentMovement > 0 && canHurryConstruction }
|
||||
))
|
||||
}
|
||||
UniqueType.CanTradeWithCityStateForGoldAndInfluence -> {
|
||||
}.asIterable()
|
||||
|
||||
fun getConductTradeMissionActions(unit:MapUnit, tile: Tile) = sequence {
|
||||
for (unique in unit.getMatchingUniques(UniqueType.CanTradeWithCityStateForGoldAndInfluence)) {
|
||||
val canConductTradeMission = tile.owningCity?.civ?.isCityState() == true
|
||||
&& tile.owningCity?.civ != unit.civ
|
||||
&& tile.owningCity?.civ?.isAtWarWith(unit.civ) == false
|
||||
val influenceEarned = unique.params[0].toFloat()
|
||||
actionList += UnitAction(
|
||||
|
||||
yield(UnitAction(
|
||||
UnitActionType.ConductTradeMission,
|
||||
action = {
|
||||
// http://civilization.wikia.com/wiki/Great_Merchant_(Civ5)
|
||||
@ -96,11 +105,8 @@ object UnitActionsGreatPerson {
|
||||
unit.civ.addNotification("Your trade mission to [$tileOwningCiv] has earned you [$goldEarned] gold and [$influenceEarned] influence!",
|
||||
NotificationCategory.General, tileOwningCiv.civName, NotificationIcon.Gold, NotificationIcon.Culture)
|
||||
unit.consume()
|
||||
}.takeIf { canConductTradeMission }
|
||||
)
|
||||
}.takeIf { unit.currentMovement > 0 && canConductTradeMission }
|
||||
))
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
}.asIterable()
|
||||
}
|
||||
|
Reference in New Issue
Block a user