mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 22:06:05 -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.Difficulty
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.RulesetCache
|
import com.unciv.models.ruleset.RulesetCache
|
||||||
|
import com.unciv.models.ruleset.Specialist
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
@ -382,7 +383,7 @@ class GameInfo {
|
|||||||
// As of 3.10.14, specialists are saved by name not by stat
|
// 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 })
|
for((key, value) in cityInfo.population.specialists.toHashMap().filter { it.value>0 })
|
||||||
cityInfo.population.specialistAllocations.add(
|
cityInfo.population.specialistAllocations.add(
|
||||||
cityInfo.population.specialistNameByStat(key), value.toInt())
|
Specialist.specialistNameByStat(key), value.toInt())
|
||||||
cityInfo.population.specialists.clear()
|
cityInfo.population.specialists.clear()
|
||||||
|
|
||||||
cityInfo.cityStats.update()
|
cityInfo.cityStats.update()
|
||||||
|
@ -4,7 +4,7 @@ import com.badlogic.gdx.graphics.Color
|
|||||||
import com.unciv.logic.automation.Automation
|
import com.unciv.logic.automation.Automation
|
||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.models.Counter
|
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.models.stats.Stats
|
||||||
import com.unciv.ui.utils.withItem
|
import com.unciv.ui.utils.withItem
|
||||||
import com.unciv.ui.utils.withoutItem
|
import com.unciv.ui.utils.withoutItem
|
||||||
@ -25,15 +25,6 @@ class PopulationManager {
|
|||||||
|
|
||||||
fun getNewSpecialists() = specialistAllocations //convertStatsToSpecialistHashmap(specialists)
|
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
|
//region pure functions
|
||||||
fun clone(): PopulationManager {
|
fun clone(): PopulationManager {
|
||||||
@ -83,13 +74,6 @@ class PopulationManager {
|
|||||||
|
|
||||||
internal fun getStatsOfSpecialist(name:String) = cityInfo.cityStats.getStatsOfSpecialist(name)
|
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!
|
// todo - change tile choice according to city!
|
||||||
// if small city, favor production above all, ignore gold!
|
// if small city, favor production above all, ignore gold!
|
||||||
@ -173,13 +157,11 @@ class PopulationManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getMaxSpecialists(): Stats {
|
fun getMaxSpecialistsNew(): Counter<String> {
|
||||||
val maximumSpecialists = Stats()
|
val counter = Counter<String>()
|
||||||
for (building in cityInfo.cityConstructions.getBuiltBuildings().filter { it.specialistSlots!=null })
|
for (building in cityInfo.cityConstructions.getBuiltBuildings())
|
||||||
maximumSpecialists.add(building.specialistSlots!!)
|
counter.add(building.newSpecialists())
|
||||||
return maximumSpecialists
|
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.CityConstructions
|
||||||
import com.unciv.logic.city.IConstruction
|
import com.unciv.logic.city.IConstruction
|
||||||
import com.unciv.logic.civilization.CivilizationInfo
|
import com.unciv.logic.civilization.CivilizationInfo
|
||||||
|
import com.unciv.models.Counter
|
||||||
import com.unciv.models.stats.NamedStats
|
import com.unciv.models.stats.NamedStats
|
||||||
import com.unciv.models.stats.Stat
|
import com.unciv.models.stats.Stat
|
||||||
import com.unciv.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
@ -19,6 +20,10 @@ class Building : NamedStats(), IConstruction {
|
|||||||
var maintenance = 0
|
var maintenance = 0
|
||||||
private var percentStatBonus: Stats? = null
|
private var percentStatBonus: Stats? = null
|
||||||
var specialistSlots: Stats? = null
|
var specialistSlots: Stats? = null
|
||||||
|
fun newSpecialists(): Counter<String> {
|
||||||
|
if(specialistSlots==null) return Counter<String>()
|
||||||
|
return Specialist.convertStatsToSpecialistHashmap(specialistSlots!!)
|
||||||
|
}
|
||||||
var greatPersonPoints: Stats? = null
|
var greatPersonPoints: Stats? = null
|
||||||
/** Extra cost percentage when purchasing */
|
/** Extra cost percentage when purchasing */
|
||||||
private var hurryCostModifier = 0
|
private var hurryCostModifier = 0
|
||||||
|
@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx
|
|||||||
import com.badlogic.gdx.files.FileHandle
|
import com.badlogic.gdx.files.FileHandle
|
||||||
import com.unciv.JsonParser
|
import com.unciv.JsonParser
|
||||||
import com.unciv.logic.UncivShowableException
|
import com.unciv.logic.UncivShowableException
|
||||||
|
import com.unciv.models.Counter
|
||||||
import com.unciv.models.metadata.BaseRuleset
|
import com.unciv.models.metadata.BaseRuleset
|
||||||
import com.unciv.models.metadata.GameParameters
|
import com.unciv.models.metadata.GameParameters
|
||||||
import com.unciv.models.ruleset.tech.TechColumn
|
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.ruleset.unit.Promotion
|
||||||
import com.unciv.models.stats.INamed
|
import com.unciv.models.stats.INamed
|
||||||
import com.unciv.models.stats.NamedStats
|
import com.unciv.models.stats.NamedStats
|
||||||
|
import com.unciv.models.stats.Stat
|
||||||
import com.unciv.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
import com.unciv.ui.utils.colorFromRGB
|
import com.unciv.ui.utils.colorFromRGB
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
@ -318,4 +320,26 @@ class Specialist: NamedStats() {
|
|||||||
var color = ArrayList<Int>()
|
var color = ArrayList<Int>()
|
||||||
val colorObject by lazy { colorFromRGB(color) }
|
val colorObject by lazy { colorFromRGB(color) }
|
||||||
var greatPersonPoints= Stats()
|
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.city.CityInfo
|
||||||
import com.unciv.logic.civilization.GreatPersonManager
|
import com.unciv.logic.civilization.GreatPersonManager
|
||||||
import com.unciv.models.ruleset.Building
|
import com.unciv.models.ruleset.Building
|
||||||
|
import com.unciv.models.ruleset.Specialist
|
||||||
import com.unciv.models.stats.Stat
|
import com.unciv.models.stats.Stat
|
||||||
import com.unciv.models.translations.tr
|
import com.unciv.models.translations.tr
|
||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.*
|
||||||
@ -152,7 +153,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS
|
|||||||
specialistIcons.row().size(20f).pad(5f)
|
specialistIcons.row().size(20f).pad(5f)
|
||||||
for (stat in building.specialistSlots!!.toHashMap()) {
|
for (stat in building.specialistSlots!!.toHashMap()) {
|
||||||
if (stat.value == 0f) continue
|
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
|
if (specialist == null) continue // probably a mod that doesn't have the specialist defined yet
|
||||||
for (i in 0 until stat.value.toInt())
|
for (i in 0 until stat.value.toInt())
|
||||||
specialistIcons.add(ImageGetter.getSpecialistIcon(specialist.colorObject)).size(20f)
|
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.scenes.scene2d.ui.Table
|
||||||
import com.badlogic.gdx.utils.Align
|
import com.badlogic.gdx.utils.Align
|
||||||
import com.unciv.UncivGame
|
import com.unciv.UncivGame
|
||||||
|
import com.unciv.models.ruleset.Specialist
|
||||||
import com.unciv.models.stats.Stat
|
import com.unciv.models.stats.Stat
|
||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.*
|
||||||
|
|
||||||
@ -14,19 +15,14 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
|
|||||||
fun update() {
|
fun update() {
|
||||||
clear()
|
clear()
|
||||||
|
|
||||||
for (statToMaximumSpecialist in cityInfo.population.getMaxSpecialists().toHashMap()) {
|
for ((specialistName, amount) in cityInfo.population.getMaxSpecialistsNew()) {
|
||||||
if (statToMaximumSpecialist.value == 0f) continue
|
|
||||||
|
|
||||||
val stat = statToMaximumSpecialist.key
|
|
||||||
|
|
||||||
val specialistName = cityInfo.population.specialistNameByStat(stat)
|
|
||||||
val newSpecialists = cityInfo.population.getNewSpecialists()
|
val newSpecialists = cityInfo.population.getNewSpecialists()
|
||||||
val assignedSpecialists = newSpecialists[specialistName]!!
|
val assignedSpecialists = newSpecialists[specialistName]!!
|
||||||
val maxSpecialists = cityInfo.population.getMaxSpecialistsNew()[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)
|
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)
|
addSeparatorVertical().pad(10f)
|
||||||
add(getSpecialistStatsTable(specialistName)).row()
|
add(getSpecialistStatsTable(specialistName)).row()
|
||||||
}
|
}
|
||||||
@ -47,14 +43,14 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
|
|||||||
return specialistIconTable
|
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()
|
if (assignedSpecialists >= maxSpecialists || cityInfo.isPuppet) return Table()
|
||||||
val assignButton = "+".toLabel(Color.BLACK,24)
|
val assignButton = "+".toLabel(Color.BLACK,24)
|
||||||
.apply { this.setAlignment(Align.center) }
|
.apply { this.setAlignment(Align.center) }
|
||||||
.surroundWithCircle(30f).apply { circle.color= Color.GREEN.cpy().lerp(Color.BLACK,0.2f) }
|
.surroundWithCircle(30f).apply { circle.color= Color.GREEN.cpy().lerp(Color.BLACK,0.2f) }
|
||||||
assignButton.onClick {
|
assignButton.onClick {
|
||||||
cityInfo.population.specialistAllocations.add(cityInfo.population.specialistNameByStat(stat), 1)
|
cityInfo.population.specialistAllocations.add(specialistName, 1)
|
||||||
cityInfo.cityStats.update()
|
cityInfo.cityStats.update()
|
||||||
cityScreen.update()
|
cityScreen.update()
|
||||||
}
|
}
|
||||||
@ -63,12 +59,12 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
|
|||||||
return assignButton
|
return assignButton
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getUnassignButton(assignedSpecialists: Int, stat: Stat):Actor {
|
private fun getUnassignButton(assignedSpecialists: Int, specialistName: String):Actor {
|
||||||
val unassignButton = "-".toLabel(Color.BLACK,24)
|
val unassignButton = "-".toLabel(Color.BLACK,24)
|
||||||
.apply { this.setAlignment(Align.center) }
|
.apply { this.setAlignment(Align.center) }
|
||||||
.surroundWithCircle(30f).apply { circle.color= Color.RED.cpy().lerp(Color.BLACK,0.1f) }
|
.surroundWithCircle(30f).apply { circle.color= Color.RED.cpy().lerp(Color.BLACK,0.1f) }
|
||||||
unassignButton.onClick {
|
unassignButton.onClick {
|
||||||
cityInfo.population.specialistAllocations.add(cityInfo.population.specialistNameByStat(stat), -1)
|
cityInfo.population.specialistAllocations.add(specialistName, -1)
|
||||||
cityInfo.cityStats.update()
|
cityInfo.cityStats.update()
|
||||||
cityScreen.update()
|
cityScreen.update()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user