mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
Completely removed usages of the old getMaxSpecialists
This commit is contained in:
parent
fd6956507d
commit
a24dc7cc69
@ -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()
|
||||
|
@ -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())
|
||||
|
||||
}
|
@ -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
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user