Add Big Ben.

This commit is contained in:
Duan Tao
2019-04-15 19:46:15 +08:00
parent 2db30a247a
commit 70241ac25b
11 changed files with 401 additions and 374 deletions

View File

@ -215,6 +215,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler for Cristo Redentor * [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler for Cristo Redentor
* [St. Petersburg](https://thenounproject.com/search/?q=kremlin&i=1569704) By Carpe Diem for Kremlin * [St. Petersburg](https://thenounproject.com/search/?q=kremlin&i=1569704) By Carpe Diem for Kremlin
* [Neuschwanstein](https://thenounproject.com/search/?q=Neuschwanstein&i=2107683) By Vectors Market * [Neuschwanstein](https://thenounproject.com/search/?q=Neuschwanstein&i=2107683) By Vectors Market
* [BugBen](https://thenounproject.com/search/?q=Big%20Ben&i=443690) By Ben Davis, RO
### Information Era ### Information Era

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 959 KiB

After

Width:  |  Height:  |  Size: 972 KiB

View File

@ -572,6 +572,14 @@
requiredBuilding:"Bank", requiredBuilding:"Bank",
requiredTech:"Electricity" requiredTech:"Electricity"
}, },
{
name:"Big Ben",
culture:1,
gold:4,
isWonder:true,
uniques:["-15% to purchasing items in cities"],
requiredTech:"Industrialization"
},
// Modern Era // Modern Era

View File

@ -36,7 +36,7 @@ class NextTurnAutomation{
for (city in civInfo.cities.sortedByDescending{ it.population.population }) { for (city in civInfo.cities.sortedByDescending{ it.population.population }) {
val construction = city.cityConstructions.getCurrentConstruction() val construction = city.cityConstructions.getCurrentConstruction()
if (construction.canBePurchased() if (construction.canBePurchased()
&& city.civInfo.gold / 3 >= construction.getGoldCost(civInfo.policies.getAdoptedPolicies()) ) { && city.civInfo.gold / 3 >= construction.getGoldCost(civInfo) ) {
city.cityConstructions.purchaseBuilding(construction.name) city.cityConstructions.purchaseBuilding(construction.name)
} }
} }

View File

@ -153,7 +153,7 @@ class Battle(val gameInfo:GameInfo) {
if(defender.isDefeated() && defender is MapUnitCombatant && !defender.getUnitType().isCivilian() if(defender.isDefeated() && defender is MapUnitCombatant && !defender.getUnitType().isCivilian()
&& attacker.getCivInfo().policies.isAdopted("Honor Complete")) && attacker.getCivInfo().policies.isAdopted("Honor Complete"))
attacker.getCivInfo().gold += defender.unit.baseUnit.getGoldCost(hashSetOf()) / 10 attacker.getCivInfo().gold += defender.unit.baseUnit.getGoldCost(attacker.getCivInfo(), true) / 10
if(attacker is MapUnitCombatant && attacker.unit.action!=null && attacker.unit.action!!.startsWith("moveTo")) if(attacker is MapUnitCombatant && attacker.unit.action!=null && attacker.unit.action!!.startsWith("moveTo"))
attacker.unit.action=null attacker.unit.action=null

View File

@ -196,7 +196,7 @@ class CityConstructions {
} }
fun purchaseBuilding(buildingName: String) { fun purchaseBuilding(buildingName: String) {
cityInfo.civInfo.gold -= getConstruction(buildingName).getGoldCost(cityInfo.civInfo.policies.adoptedPolicies) cityInfo.civInfo.gold -= getConstruction(buildingName).getGoldCost(cityInfo.civInfo)
getConstruction(buildingName).postBuildEvent(this) getConstruction(buildingName).postBuildEvent(this)
if (currentConstruction == buildingName) { if (currentConstruction == buildingName) {
currentConstruction = "" currentConstruction = ""

View File

@ -1,11 +1,12 @@
package com.unciv.logic.city package com.unciv.logic.city
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.ICivilopedia
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
interface IConstruction : INamed, ICivilopedia { interface IConstruction : INamed, ICivilopedia {
fun getProductionCost(adoptedPolicies: HashSet<String>): Int fun getProductionCost(adoptedPolicies: HashSet<String>): Int
fun getGoldCost(adoptedPolicies: HashSet<String>): Int fun getGoldCost(civInfo: CivilizationInfo, baseCost: Boolean = false): Int
fun isBuildable(construction: CityConstructions): Boolean fun isBuildable(construction: CityConstructions): Boolean
fun shouldBeDisplayed(construction: CityConstructions): Boolean fun shouldBeDisplayed(construction: CityConstructions): Boolean
fun postBuildEvent(construction: CityConstructions) // Yes I'm hilarious. fun postBuildEvent(construction: CityConstructions) // Yes I'm hilarious.
@ -48,7 +49,7 @@ open class SpecialConstruction(override var name: String, override val descripti
throw Exception("Impossible!") throw Exception("Impossible!")
} }
override fun getGoldCost(adoptedPolicies: HashSet<String>): Int { override fun getGoldCost(civInfo: CivilizationInfo, baseCost: Boolean): Int {
throw Exception("Impossible!") throw Exception("Impossible!")
} }

View File

@ -169,12 +169,19 @@ class Building : NamedStats(), IConstruction{
else cost else cost
} }
override fun getGoldCost(adoptedPolicies: HashSet<String>): Int { override fun getGoldCost(civInfo: CivilizationInfo, baseCost: Boolean): Int {
// https://forums.civfanatics.com/threads/rush-buying-formula.393892/ // https://forums.civfanatics.com/threads/rush-buying-formula.393892/
var cost = Math.pow((30 * getProductionCost(adoptedPolicies)).toDouble(), 0.75) * (1 + hurryCostModifier / 100) var cost: Double
if (adoptedPolicies.contains("Mercantilism")) cost *= 0.75 if (baseCost) {
if (adoptedPolicies.contains("Patronage") cost = Math.pow((30 * getProductionCost(hashSetOf())).toDouble(), 0.75) * (1 + hurryCostModifier / 100)
&& listOf("Monument", "Temple", "Opera House", "Museum").contains(name) ) cost *= 0.5 } else {
cost = Math.pow((30 * getProductionCost(civInfo.policies.adoptedPolicies)).toDouble(), 0.75) * (1 + hurryCostModifier / 100)
if (civInfo.policies.adoptedPolicies.contains("Mercantilism")) cost *= 0.75
if (civInfo.getBuildingUniques().contains("-15% to purchasing items in cities")) cost *= 0.85
if (civInfo.policies.adoptedPolicies.contains("Patronage")
&& listOf("Monument", "Temple", "Opera House", "Museum").contains(name)) cost *= 0.5
}
return (cost / 10).toInt() * 10 return (cost / 10).toInt() * 10
} }

View File

@ -99,10 +99,13 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
fun getBaseGoldCost() = Math.pow((30 * cost).toDouble(), 0.75) * (1 + hurryCostModifier / 100) fun getBaseGoldCost() = Math.pow((30 * cost).toDouble(), 0.75) * (1 + hurryCostModifier / 100)
override fun getGoldCost(adoptedPolicies: HashSet<String>): Int { override fun getGoldCost(civInfo: CivilizationInfo, baseCost: Boolean): Int {
var cost = getBaseGoldCost() var cost = getBaseGoldCost()
if(adoptedPolicies.contains("Mercantilism")) cost *= 0.75 if (!baseCost) {
if(adoptedPolicies.contains("Militarism")) cost *= 0.66f if(civInfo.policies.adoptedPolicies.contains("Mercantilism")) cost *= 0.75
if(civInfo.policies.adoptedPolicies.contains("Militarism")) cost *= 0.66f
if (civInfo.getBuildingUniques().contains("-15% to purchasing items in cities")) cost *= 0.85
}
return (cost / 10).toInt() * 10 // rounded down o nearest ten return (cost / 10).toInt() * 10 // rounded down o nearest ten
} }

View File

@ -139,7 +139,7 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
row() row()
val purchaseConstructionButton: TextButton val purchaseConstructionButton: TextButton
if (construction.canBePurchased()) { if (construction.canBePurchased()) {
val buildingGoldCost = construction.getGoldCost(city.civInfo.policies.getAdoptedPolicies()) val buildingGoldCost = construction.getGoldCost(city.civInfo)
purchaseConstructionButton = TextButton("Buy for [$buildingGoldCost] gold".tr(), CameraStageBaseScreen.skin) purchaseConstructionButton = TextButton("Buy for [$buildingGoldCost] gold".tr(), CameraStageBaseScreen.skin)
purchaseConstructionButton.onClick("coin") { purchaseConstructionButton.onClick("coin") {
YesNoPopupTable("Would you like to purchase [${construction.name}] for [$buildingGoldCost] gold?".tr(), { YesNoPopupTable("Would you like to purchase [${construction.name}] for [$buildingGoldCost] gold?".tr(), {