mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-12 08:49:22 +07:00
Fix UX of random nations pool && keep advanced tab open when updating the screen (#8452)
* added feature to select specific city states
created MultiNationSelectPopup to reuse for the city states
* keep advanced tab open when update() is called
* Revert "added feature to select specific city states"
This reverts commit 4a1e6964b0
.
* improved UX
* translations
* fix checks
This commit is contained in:
BIN
android/Images/OtherIcons/NationSwap.png
Normal file
BIN
android/Images/OtherIcons/NationSwap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
@ -336,8 +336,9 @@ Promotions =
|
|||||||
Load copied data =
|
Load copied data =
|
||||||
Reset to defaults =
|
Reset to defaults =
|
||||||
Select nations =
|
Select nations =
|
||||||
Random nations pool =
|
Set available nations for random pool =
|
||||||
Blacklist random nations pool =
|
Available nations =
|
||||||
|
Banned nations =
|
||||||
Are you sure you want to reset all game options to defaults? =
|
Are you sure you want to reset all game options to defaults? =
|
||||||
Start game! =
|
Start game! =
|
||||||
Map Options =
|
Map Options =
|
||||||
|
@ -223,14 +223,8 @@ object GameStarter {
|
|||||||
val availableCivNames = Stack<String>()
|
val availableCivNames = Stack<String>()
|
||||||
// CityState or Spectator civs are not available for Random pick
|
// CityState or Spectator civs are not available for Random pick
|
||||||
if (gameSetupInfo.gameParameters.enableRandomNationsPool) {
|
if (gameSetupInfo.gameParameters.enableRandomNationsPool) {
|
||||||
if (gameSetupInfo.gameParameters.blacklistRandomNationsPool) {
|
for (nation in gameSetupInfo.gameParameters.randomNations)
|
||||||
availableCivNames.addAll(ruleset.nations.filter { it.value.isMajorCiv() }.keys.shuffled())
|
availableCivNames.add(nation.name)
|
||||||
for (nation in gameSetupInfo.gameParameters.randomNations)
|
|
||||||
availableCivNames.remove(nation.name)
|
|
||||||
} else {
|
|
||||||
for (nation in gameSetupInfo.gameParameters.randomNations)
|
|
||||||
availableCivNames.add(nation.name)
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
availableCivNames.addAll(ruleset.nations.filter { it.value.isMajorCiv() }.keys.shuffled())
|
availableCivNames.addAll(ruleset.nations.filter { it.value.isMajorCiv() }.keys.shuffled())
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@ class GameParameters : IsPartOfGameInfoSerialization { // Default values are the
|
|||||||
var numberOfCityStates = 6
|
var numberOfCityStates = 6
|
||||||
|
|
||||||
var enableRandomNationsPool = false
|
var enableRandomNationsPool = false
|
||||||
var blacklistRandomNationsPool = false
|
|
||||||
var randomNations = arrayListOf<Nation>()
|
var randomNations = arrayListOf<Nation>()
|
||||||
|
|
||||||
var noCityRazing = false
|
var noCityRazing = false
|
||||||
|
@ -42,7 +42,10 @@ class GameOptionsTable(
|
|||||||
val ruleset = previousScreen.ruleset
|
val ruleset = previousScreen.ruleset
|
||||||
var locked = false
|
var locked = false
|
||||||
var modCheckboxes: ModCheckboxTable? = null
|
var modCheckboxes: ModCheckboxTable? = null
|
||||||
private set
|
private set
|
||||||
|
var keepAdvancedTabOpenForNationsPool = false
|
||||||
|
var keepAdvancedTabOpenForRandomNations = false
|
||||||
|
var keepAdvancedTabOpenForRandomCityStates = false
|
||||||
|
|
||||||
init {
|
init {
|
||||||
getGameOptionsTable()
|
getGameOptionsTable()
|
||||||
@ -97,7 +100,9 @@ class GameOptionsTable(
|
|||||||
checkboxTable.addAnyoneCanSpectateCheckbox()
|
checkboxTable.addAnyoneCanSpectateCheckbox()
|
||||||
add(checkboxTable).center().row()
|
add(checkboxTable).center().row()
|
||||||
|
|
||||||
val expander = ExpanderTab("Advanced Settings", startsOutOpened = false) {
|
val expander = ExpanderTab(
|
||||||
|
"Advanced Settings",
|
||||||
|
startsOutOpened = keepAdvancedTabOpenForNationsPool || keepAdvancedTabOpenForRandomNations || keepAdvancedTabOpenForRandomCityStates) {
|
||||||
it.addNoCityRazingCheckbox()
|
it.addNoCityRazingCheckbox()
|
||||||
it.addNoBarbariansCheckbox()
|
it.addNoBarbariansCheckbox()
|
||||||
it.addRagingBarbariansCheckbox()
|
it.addRagingBarbariansCheckbox()
|
||||||
@ -110,7 +115,6 @@ class GameOptionsTable(
|
|||||||
it.addRandomCityStatesCheckbox()
|
it.addRandomCityStatesCheckbox()
|
||||||
it.addRandomNationsPoolCheckbox()
|
it.addRandomNationsPoolCheckbox()
|
||||||
if (gameParameters.enableRandomNationsPool) {
|
if (gameParameters.enableRandomNationsPool) {
|
||||||
it.addBlacklistRandomPool()
|
|
||||||
it.addNationsSelectTextButton()
|
it.addNationsSelectTextButton()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,16 +176,12 @@ class GameOptionsTable(
|
|||||||
{ gameParameters.espionageEnabled = it }
|
{ gameParameters.espionageEnabled = it }
|
||||||
|
|
||||||
private fun Table.addRandomNationsPoolCheckbox() =
|
private fun Table.addRandomNationsPoolCheckbox() =
|
||||||
addCheckbox("Random nations pool", gameParameters.enableRandomNationsPool) {
|
addCheckbox("Set available nations for random pool", gameParameters.enableRandomNationsPool) {
|
||||||
gameParameters.enableRandomNationsPool = it
|
gameParameters.enableRandomNationsPool = it
|
||||||
|
keepAdvancedTabOpenForNationsPool = it
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Table.addBlacklistRandomPool() =
|
|
||||||
addCheckbox("Blacklist random nations pool", gameParameters.blacklistRandomNationsPool) {
|
|
||||||
gameParameters.blacklistRandomNationsPool = it
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Table.addNationsSelectTextButton() {
|
private fun Table.addNationsSelectTextButton() {
|
||||||
val button = "Select nations".toTextButton()
|
val button = "Select nations".toTextButton()
|
||||||
button.onClick {
|
button.onClick {
|
||||||
@ -209,6 +209,7 @@ class GameOptionsTable(
|
|||||||
addCheckbox("Random number of Civilizations", gameParameters.randomNumberOfPlayers)
|
addCheckbox("Random number of Civilizations", gameParameters.randomNumberOfPlayers)
|
||||||
{
|
{
|
||||||
gameParameters.randomNumberOfPlayers = it
|
gameParameters.randomNumberOfPlayers = it
|
||||||
|
keepAdvancedTabOpenForRandomNations = it
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,6 +217,7 @@ class GameOptionsTable(
|
|||||||
addCheckbox("Random number of City-States", gameParameters.randomNumberOfCityStates)
|
addCheckbox("Random number of City-States", gameParameters.randomNumberOfCityStates)
|
||||||
{
|
{
|
||||||
gameParameters.randomNumberOfCityStates = it
|
gameParameters.randomNumberOfCityStates = it
|
||||||
|
keepAdvancedTabOpenForRandomCityStates = it
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,18 +464,27 @@ private class RandomNationPickerPopup(
|
|||||||
private val nationListScroll = AutoScrollPane(nationListTable)
|
private val nationListScroll = AutoScrollPane(nationListTable)
|
||||||
private val selectedNationsListTable = Table()
|
private val selectedNationsListTable = Table()
|
||||||
private val selectedNationsListScroll = AutoScrollPane(selectedNationsListTable)
|
private val selectedNationsListScroll = AutoScrollPane(selectedNationsListTable)
|
||||||
private var selectedNations = gameParameters.randomNations
|
private var bannedNations = gameParameters.randomNations
|
||||||
var nations = arrayListOf<Nation>()
|
var availableNations = arrayListOf<Nation>()
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
var nationListScrollY = 0f
|
var nationListScrollY = 0f
|
||||||
nations += previousScreen.ruleset.nations.values.asSequence()
|
availableNations += previousScreen.ruleset.nations.values.asSequence()
|
||||||
.filter { it.isMajorCiv() }
|
.filter { it.isMajorCiv() }
|
||||||
nationListScroll.setOverscroll(false, false)
|
nationListScroll.setOverscroll(false, false)
|
||||||
add(nationListScroll).size( civBlocksWidth + 10f, partHeight )
|
|
||||||
// +10, because the nation table has a 5f pad, for a total of +10f
|
// +10, because the nation table has a 5f pad, for a total of +10f
|
||||||
if (stageToShowOn.isNarrowerThan4to3()) row()
|
if (stageToShowOn.isNarrowerThan4to3()) {
|
||||||
|
add("Available nations".tr())
|
||||||
|
row()
|
||||||
|
add(nationListScroll).size( civBlocksWidth + 10f, partHeight )
|
||||||
|
row()
|
||||||
|
add("Banned nations".tr()).row()
|
||||||
|
} else {
|
||||||
|
add("Available nations".tr())
|
||||||
|
add("Banned nations".tr()).row()
|
||||||
|
row()
|
||||||
|
add(nationListScroll).size( civBlocksWidth + 10f, partHeight )
|
||||||
|
}
|
||||||
selectedNationsListScroll.setOverscroll(false, false)
|
selectedNationsListScroll.setOverscroll(false, false)
|
||||||
add(selectedNationsListScroll).size(civBlocksWidth + 10f, partHeight) // Same here, see above
|
add(selectedNationsListScroll).size(civBlocksWidth + 10f, partHeight) // Same here, see above
|
||||||
|
|
||||||
@ -498,17 +509,22 @@ private class RandomNationPickerPopup(
|
|||||||
okButton.setPosition(innerTable.width - buttonsOffsetFromEdge, buttonsOffsetFromEdge, Align.bottomRight)
|
okButton.setPosition(innerTable.width - buttonsOffsetFromEdge, buttonsOffsetFromEdge, Align.bottomRight)
|
||||||
innerTable.addActor(okButton)
|
innerTable.addActor(okButton)
|
||||||
|
|
||||||
|
val switchButton = "OtherIcons/NationSwap".toImageButton(Color.YELLOW)
|
||||||
|
switchButton.onClick { switchAllNations() }
|
||||||
|
switchButton.setPosition(innerTable.width / 2, buttonsOffsetFromEdge + 35, Align.center)
|
||||||
|
innerTable.addActor(switchButton)
|
||||||
|
|
||||||
selectedNationsListTable.touchable = Touchable.enabled
|
selectedNationsListTable.touchable = Touchable.enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
fun update() {
|
fun update() {
|
||||||
nationListTable.clear()
|
nationListTable.clear()
|
||||||
selectedNations = gameParameters.randomNations
|
bannedNations = gameParameters.randomNations
|
||||||
nations -= selectedNations.toSet()
|
availableNations -= bannedNations.toSet()
|
||||||
nations = nations.sortedWith(compareBy(UncivGame.Current.settings.getCollatorFromLocale()) { it.name.tr() }).toMutableList() as ArrayList<Nation>
|
availableNations = availableNations.sortedWith(compareBy(UncivGame.Current.settings.getCollatorFromLocale()) { it.name.tr() }).toMutableList() as ArrayList<Nation>
|
||||||
|
|
||||||
var currentY = 0f
|
var currentY = 0f
|
||||||
for (nation in nations) {
|
for (nation in availableNations) {
|
||||||
val nationTable = NationTable(nation, civBlocksWidth, 0f) // no need for min height
|
val nationTable = NationTable(nation, civBlocksWidth, 0f) // no need for min height
|
||||||
val cell = nationListTable.add(nationTable)
|
val cell = nationListTable.add(nationTable)
|
||||||
currentY += cell.padBottom + cell.prefHeight + cell.padTop
|
currentY += cell.padBottom + cell.prefHeight + cell.padTop
|
||||||
@ -518,10 +534,10 @@ private class RandomNationPickerPopup(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedNations.isNotEmpty()) {
|
if (bannedNations.isNotEmpty()) {
|
||||||
selectedNationsListTable.clear()
|
selectedNationsListTable.clear()
|
||||||
|
|
||||||
for (currentNation in selectedNations) {
|
for (currentNation in bannedNations) {
|
||||||
val nationTable = NationTable(currentNation, civBlocksWidth, 0f)
|
val nationTable = NationTable(currentNation, civBlocksWidth, 0f)
|
||||||
nationTable.onClick { removeNationFromPool(currentNation) }
|
nationTable.onClick { removeNationFromPool(currentNation) }
|
||||||
selectedNationsListTable.add(nationTable).row()
|
selectedNationsListTable.add(nationTable).row()
|
||||||
@ -543,7 +559,7 @@ private class RandomNationPickerPopup(
|
|||||||
private fun updateNationListTable() {
|
private fun updateNationListTable() {
|
||||||
selectedNationsListTable.clear()
|
selectedNationsListTable.clear()
|
||||||
|
|
||||||
for (currentNation in selectedNations) {
|
for (currentNation in bannedNations) {
|
||||||
val nationTable = NationTable(currentNation, civBlocksWidth, 0f)
|
val nationTable = NationTable(currentNation, civBlocksWidth, 0f)
|
||||||
nationTable.onClick { removeNationFromPool(currentNation) }
|
nationTable.onClick { removeNationFromPool(currentNation) }
|
||||||
selectedNationsListTable.add(nationTable).row()
|
selectedNationsListTable.add(nationTable).row()
|
||||||
@ -551,15 +567,15 @@ private class RandomNationPickerPopup(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addNationToPool(nation: Nation) {
|
private fun addNationToPool(nation: Nation) {
|
||||||
selectedNations.add(nation)
|
bannedNations.add(nation)
|
||||||
|
|
||||||
update()
|
update()
|
||||||
updateNationListTable()
|
updateNationListTable()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeNationFromPool(nation: Nation) {
|
private fun removeNationFromPool(nation: Nation) {
|
||||||
nations.add(nation)
|
availableNations.add(nation)
|
||||||
selectedNations.remove(nation)
|
bannedNations.remove(nation)
|
||||||
|
|
||||||
update()
|
update()
|
||||||
updateNationListTable()
|
updateNationListTable()
|
||||||
@ -567,7 +583,18 @@ private class RandomNationPickerPopup(
|
|||||||
|
|
||||||
private fun returnSelected() {
|
private fun returnSelected() {
|
||||||
close()
|
close()
|
||||||
gameParameters.randomNations = selectedNations
|
gameParameters.randomNations = availableNations
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun switchAllNations() {
|
||||||
|
val tempNations = availableNations
|
||||||
|
availableNations = bannedNations
|
||||||
|
bannedNations = tempNations
|
||||||
|
|
||||||
|
gameParameters.randomNations = bannedNations
|
||||||
|
|
||||||
|
update()
|
||||||
|
updateNationListTable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user