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