Completely removed usages of the old getMaxSpecialists

This commit is contained in:
Yair Morgenstern 2020-10-04 15:47:57 +03:00
parent fd6956507d
commit a24dc7cc69
6 changed files with 47 additions and 38 deletions

View File

@ -14,6 +14,7 @@ import com.unciv.models.metadata.GameParameters
import com.unciv.models.ruleset.Difficulty
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.RulesetCache
import com.unciv.models.ruleset.Specialist
import java.util.*
import kotlin.collections.ArrayList
@ -382,7 +383,7 @@ class GameInfo {
// As of 3.10.14, specialists are saved by name not by stat
for((key, value) in cityInfo.population.specialists.toHashMap().filter { it.value>0 })
cityInfo.population.specialistAllocations.add(
cityInfo.population.specialistNameByStat(key), value.toInt())
Specialist.specialistNameByStat(key), value.toInt())
cityInfo.population.specialists.clear()
cityInfo.cityStats.update()

View File

@ -4,7 +4,7 @@ import com.badlogic.gdx.graphics.Color
import com.unciv.logic.automation.Automation
import com.unciv.logic.map.TileInfo
import com.unciv.models.Counter
import com.unciv.models.stats.Stat
import com.unciv.models.ruleset.Specialist
import com.unciv.models.stats.Stats
import com.unciv.ui.utils.withItem
import com.unciv.ui.utils.withoutItem
@ -25,15 +25,6 @@ class PopulationManager {
fun getNewSpecialists() = specialistAllocations //convertStatsToSpecialistHashmap(specialists)
fun convertStatsToSpecialistHashmap(stats: Stats):Counter<String> {
val specialistHashmap = Counter<String>()
for ((stat, amount) in stats.toHashMap()) {
if (amount == 0f) continue
val specialistName = specialistNameByStat(stat)
specialistHashmap[specialistName] = amount.toInt()
}
return specialistHashmap
}
//region pure functions
fun clone(): PopulationManager {
@ -83,13 +74,6 @@ class PopulationManager {
internal fun getStatsOfSpecialist(name:String) = cityInfo.cityStats.getStatsOfSpecialist(name)
internal fun specialistNameByStat(stat: Stat) = when (stat) {
Stat.Production -> "Engineer"
Stat.Gold -> "Merchant"
Stat.Science -> "Scientist"
Stat.Culture -> "Artist"
else -> TODO()
}
// todo - change tile choice according to city!
// if small city, favor production above all, ignore gold!
@ -173,13 +157,11 @@ class PopulationManager {
}
fun getMaxSpecialists(): Stats {
val maximumSpecialists = Stats()
for (building in cityInfo.cityConstructions.getBuiltBuildings().filter { it.specialistSlots!=null })
maximumSpecialists.add(building.specialistSlots!!)
return maximumSpecialists
fun getMaxSpecialistsNew(): Counter<String> {
val counter = Counter<String>()
for (building in cityInfo.cityConstructions.getBuiltBuildings())
counter.add(building.newSpecialists())
return counter
}
fun getMaxSpecialistsNew() = convertStatsToSpecialistHashmap(getMaxSpecialists())
}

View File

@ -4,6 +4,7 @@ import com.unciv.Constants
import com.unciv.logic.city.CityConstructions
import com.unciv.logic.city.IConstruction
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.Counter
import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stat
import com.unciv.models.stats.Stats
@ -19,6 +20,10 @@ class Building : NamedStats(), IConstruction {
var maintenance = 0
private var percentStatBonus: Stats? = null
var specialistSlots: Stats? = null
fun newSpecialists(): Counter<String> {
if(specialistSlots==null) return Counter<String>()
return Specialist.convertStatsToSpecialistHashmap(specialistSlots!!)
}
var greatPersonPoints: Stats? = null
/** Extra cost percentage when purchasing */
private var hurryCostModifier = 0

View File

@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.files.FileHandle
import com.unciv.JsonParser
import com.unciv.logic.UncivShowableException
import com.unciv.models.Counter
import com.unciv.models.metadata.BaseRuleset
import com.unciv.models.metadata.GameParameters
import com.unciv.models.ruleset.tech.TechColumn
@ -15,6 +16,7 @@ import com.unciv.models.ruleset.unit.BaseUnit
import com.unciv.models.ruleset.unit.Promotion
import com.unciv.models.stats.INamed
import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stat
import com.unciv.models.stats.Stats
import com.unciv.ui.utils.colorFromRGB
import kotlin.collections.set
@ -318,4 +320,26 @@ class Specialist: NamedStats() {
var color = ArrayList<Int>()
val colorObject by lazy { colorFromRGB(color) }
var greatPersonPoints= Stats()
companion object {
fun convertStatsToSpecialistHashmap(stats: Stats): Counter<String> {
val specialistHashmap = Counter<String>()
for ((stat, amount) in stats.toHashMap()) {
if (amount == 0f) continue
val specialistName = specialistNameByStat(stat)
specialistHashmap[specialistName] = amount.toInt()
}
return specialistHashmap
}
internal fun specialistNameByStat(stat: Stat) = when (stat) {
Stat.Production -> "Engineer"
Stat.Gold -> "Merchant"
Stat.Science -> "Scientist"
Stat.Culture -> "Artist"
else -> TODO()
}
}
}

View File

@ -8,6 +8,7 @@ import com.unciv.UncivGame
import com.unciv.logic.city.CityInfo
import com.unciv.logic.civilization.GreatPersonManager
import com.unciv.models.ruleset.Building
import com.unciv.models.ruleset.Specialist
import com.unciv.models.stats.Stat
import com.unciv.models.translations.tr
import com.unciv.ui.utils.*
@ -152,7 +153,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS
specialistIcons.row().size(20f).pad(5f)
for (stat in building.specialistSlots!!.toHashMap()) {
if (stat.value == 0f) continue
val specialist = cityInfo.getRuleset().specialists[cityInfo.population.specialistNameByStat(stat.key)]
val specialist = cityInfo.getRuleset().specialists[Specialist.specialistNameByStat(stat.key)]
if (specialist == null) continue // probably a mod that doesn't have the specialist defined yet
for (i in 0 until stat.value.toInt())
specialistIcons.add(ImageGetter.getSpecialistIcon(specialist.colorObject)).size(20f)

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.utils.Align
import com.unciv.UncivGame
import com.unciv.models.ruleset.Specialist
import com.unciv.models.stats.Stat
import com.unciv.ui.utils.*
@ -14,19 +15,14 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
fun update() {
clear()
for (statToMaximumSpecialist in cityInfo.population.getMaxSpecialists().toHashMap()) {
if (statToMaximumSpecialist.value == 0f) continue
val stat = statToMaximumSpecialist.key
val specialistName = cityInfo.population.specialistNameByStat(stat)
for ((specialistName, amount) in cityInfo.population.getMaxSpecialistsNew()) {
val newSpecialists = cityInfo.population.getNewSpecialists()
val assignedSpecialists = newSpecialists[specialistName]!!
val maxSpecialists = cityInfo.population.getMaxSpecialistsNew()[specialistName]!!
if (cityScreen.canChangeState) add(getUnassignButton(assignedSpecialists, stat))
if (cityScreen.canChangeState) add(getUnassignButton(assignedSpecialists, specialistName))
add(getAllocationTable(assignedSpecialists, maxSpecialists, specialistName)).pad(10f)
if (cityScreen.canChangeState) add(getAssignButton(assignedSpecialists, maxSpecialists, stat))
if (cityScreen.canChangeState) add(getAssignButton(assignedSpecialists, maxSpecialists, specialistName))
addSeparatorVertical().pad(10f)
add(getSpecialistStatsTable(specialistName)).row()
}
@ -47,14 +43,14 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
return specialistIconTable
}
private fun getAssignButton(assignedSpecialists: Int, maxSpecialists: Int, stat: Stat):Actor {
private fun getAssignButton(assignedSpecialists: Int, maxSpecialists: Int, specialistName: String):Actor {
if (assignedSpecialists >= maxSpecialists || cityInfo.isPuppet) return Table()
val assignButton = "+".toLabel(Color.BLACK,24)
.apply { this.setAlignment(Align.center) }
.surroundWithCircle(30f).apply { circle.color= Color.GREEN.cpy().lerp(Color.BLACK,0.2f) }
assignButton.onClick {
cityInfo.population.specialistAllocations.add(cityInfo.population.specialistNameByStat(stat), 1)
cityInfo.population.specialistAllocations.add(specialistName, 1)
cityInfo.cityStats.update()
cityScreen.update()
}
@ -63,12 +59,12 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
return assignButton
}
private fun getUnassignButton(assignedSpecialists: Int, stat: Stat):Actor {
private fun getUnassignButton(assignedSpecialists: Int, specialistName: String):Actor {
val unassignButton = "-".toLabel(Color.BLACK,24)
.apply { this.setAlignment(Align.center) }
.surroundWithCircle(30f).apply { circle.color= Color.RED.cpy().lerp(Color.BLACK,0.1f) }
unassignButton.onClick {
cityInfo.population.specialistAllocations.add(cityInfo.population.specialistNameByStat(stat), -1)
cityInfo.population.specialistAllocations.add(specialistName, -1)
cityInfo.cityStats.update()
cityScreen.update()
}