Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify leaderboard for party mode #308

Merged
merged 1 commit into from
Mar 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/kotlin/dartzee/game/X01Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package dartzee.game
import com.fasterxml.jackson.module.kotlin.readValue
import dartzee.core.util.jsonMapper

val X01_PARTY_CONFIG = X01Config(301, FinishType.Any)

enum class FinishType {
Any,
Doubles
Expand Down
11 changes: 10 additions & 1 deletion src/main/kotlin/dartzee/screen/MenuScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import dartzee.screen.player.PlayerManagementScreen
import dartzee.screen.preference.PreferencesScreen
import dartzee.screen.reporting.ReportingSetupScreen
import dartzee.screen.stats.overall.LeaderboardsScreen
import dartzee.screen.stats.overall.SimplifiedLeaderboardScreen
import dartzee.screen.sync.SyncManagementScreen
import dartzee.utils.DARTS_VERSION_NUMBER
import dartzee.utils.InjectedThings
Expand Down Expand Up @@ -181,6 +182,14 @@ class MenuScreen : EmbeddedScreen() {
}
}

private fun openLeaderboards() {
if (InjectedThings.partyMode) {
ScreenCache.switch<SimplifiedLeaderboardScreen>()
} else {
ScreenCache.switch<LeaderboardsScreen>()
}
}

override fun showBackButton() = false

override fun actionPerformed(arg0: ActionEvent) {
Expand All @@ -190,7 +199,7 @@ class MenuScreen : EmbeddedScreen() {
btnNewGame -> newGame()
btnManagePlayers -> ScreenCache.switch<PlayerManagementScreen>()
btnGameReport -> ScreenCache.switch<ReportingSetupScreen>()
btnLeaderboards -> ScreenCache.switch<LeaderboardsScreen>()
btnLeaderboards -> openLeaderboards()
btnUtilities -> ScreenCache.switch<UtilitiesScreen>()
btnDartzeeTemplates -> ScreenCache.switch<DartzeeTemplateSetupScreen>()
else -> super.actionPerformed(arg0)
Expand Down
5 changes: 2 additions & 3 deletions src/main/kotlin/dartzee/screen/SimplePlayerSelectionScreen.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package dartzee.screen

import dartzee.bean.GameSetupPlayerSelector
import dartzee.game.FinishType
import dartzee.game.GameLaunchParams
import dartzee.game.GameType
import dartzee.game.X01Config
import dartzee.game.X01_PARTY_CONFIG
import dartzee.utils.InjectedThings.gameLauncher
import java.awt.BorderLayout

Expand All @@ -28,7 +27,7 @@ class SimplePlayerSelectionScreen : EmbeddedScreen() {
GameLaunchParams(
playerSelector.getSelectedPlayers(),
GameType.X01,
X01Config(301, FinishType.Any).toJson(),
X01_PARTY_CONFIG.toJson(),
playerSelector.pairMode(),
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dartzee.core.util.sortedBy
import dartzee.db.PlayerEntity
import dartzee.game.GameType
import dartzee.utils.InjectedThings.mainDatabase
import dartzee.utils.InjectedThings.partyMode
import dartzee.utils.PREFERENCES_INT_LEADERBOARD_SIZE
import dartzee.utils.PreferenceUtil
import dartzee.utils.combinePlayerFlags
Expand All @@ -20,7 +21,7 @@ import javax.swing.JRadioButton
import javax.swing.JSeparator
import javax.swing.SwingConstants

class LeaderboardTotalScore(private val gameType: GameType) :
class LeaderboardTotalScore(private val gameType: GameType, gameParams: String? = null) :
AbstractLeaderboard(), ActionListener {
private val panelGameParams = getFilterPanel(gameType)

Expand All @@ -46,15 +47,24 @@ class LeaderboardTotalScore(private val gameType: GameType) :

add(panelFilters, BorderLayout.NORTH)

panelFilters.add(panelGameParams)
panelFilters.add(makeSeparator())
if (!partyMode) {
panelFilters.add(panelGameParams)
panelFilters.add(makeSeparator())
}

panelFilters.add(panelTeamsOrIndividuals)
panelFilters.add(makeSeparator())
panelFilters.add(panelPlayerFilters)
panelFilters.add(makeSeparator())

if (!partyMode) {
panelFilters.add(panelPlayerFilters)
panelFilters.add(makeSeparator())
}

panelFilters.add(panelBestOrWorst)
add(table, BorderLayout.CENTER)

gameParams?.let(panelGameParams::setGameParams)

panelGameParams.addActionListener(this)
panelPlayerFilters.addActionListener(this)
panelTeamsOrIndividuals.addActionListener(this)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package dartzee.screen.stats.overall

import dartzee.game.GameType
import dartzee.game.X01_PARTY_CONFIG
import dartzee.screen.EmbeddedScreen
import java.awt.BorderLayout

class SimplifiedLeaderboardScreen : EmbeddedScreen() {
private val tab = LeaderboardTotalScore(GameType.X01, X01_PARTY_CONFIG.toJson())

init {
add(tab, BorderLayout.CENTER)
}

override fun getScreenName() = "Leaderboard"

override fun initialise() {
tab.buildTable()
}
}
10 changes: 10 additions & 0 deletions src/test/kotlin/dartzee/screen/TestMenuScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import dartzee.screen.player.PlayerManagementScreen
import dartzee.screen.preference.PreferencesScreen
import dartzee.screen.reporting.ReportingSetupScreen
import dartzee.screen.stats.overall.LeaderboardsScreen
import dartzee.screen.stats.overall.SimplifiedLeaderboardScreen
import dartzee.screen.sync.SyncManagementScreen
import dartzee.utils.InjectedThings
import io.kotest.matchers.nulls.shouldNotBeNull
Expand Down Expand Up @@ -65,6 +66,15 @@ class TestMenuScreen : AbstractTest() {
ScreenCache.currentScreen().shouldBeInstanceOf<LeaderboardsScreen>()
}

@Test
fun `Should go to the simplified leaderboards screen in party mode`() {
InjectedThings.partyMode = true

val scrn = MenuScreen()
scrn.clickChild<JButton>(text = "Leaderboards")
ScreenCache.currentScreen().shouldBeInstanceOf<SimplifiedLeaderboardScreen>()
}

@Test
fun `Should go to the utilities screen`() {
val scrn = MenuScreen()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ import com.github.alyssaburlton.swingtest.clickOk
import com.github.alyssaburlton.swingtest.getChild
import dartzee.bean.GameSetupPlayerSelector
import dartzee.core.helper.verifyNotCalled
import dartzee.game.FinishType
import dartzee.game.GameLaunchParams
import dartzee.game.GameLauncher
import dartzee.game.GameType
import dartzee.game.X01Config
import dartzee.game.X01_PARTY_CONFIG
import dartzee.getDialogMessage
import dartzee.getErrorDialog
import dartzee.helper.AbstractTest
Expand Down Expand Up @@ -55,12 +54,7 @@ class TestSimplePlayerSelectionScreen : AbstractTest() {

verify {
gameLauncher.launchNewGame(
GameLaunchParams(
listOf(p1, p2),
GameType.X01,
X01Config(301, FinishType.Any).toJson(),
false
)
GameLaunchParams(listOf(p1, p2), GameType.X01, X01_PARTY_CONFIG.toJson(), false)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
package dartzee.screen.stats.overall

import com.github.alyssaburlton.swingtest.clickChild
import com.github.alyssaburlton.swingtest.findChild
import com.github.alyssaburlton.swingtest.getChild
import dartzee.bean.GameParamFilterPanel
import dartzee.bean.GameParamFilterPanelRoundTheClock
import dartzee.bean.GameParamFilterPanelX01
import dartzee.bean.PlayerTypeFilterPanel
import dartzee.bean.SpinnerX01
import dartzee.core.bean.ScrollTable
import dartzee.game.ClockType
import dartzee.game.FinishType
import dartzee.game.GameType
import dartzee.game.RoundTheClockConfig
import dartzee.game.X01Config
import dartzee.helper.AbstractRegistryTest
import dartzee.helper.insertFinishedParticipant
import dartzee.helper.insertFinishedTeam
import dartzee.utils.InjectedThings
import dartzee.utils.PREFERENCES_INT_LEADERBOARD_SIZE
import dartzee.utils.PreferenceUtil
import io.kotest.matchers.shouldBe
import javax.swing.JCheckBox
import javax.swing.JRadioButton
import org.junit.jupiter.api.Test

Expand Down Expand Up @@ -161,6 +169,29 @@ class TestLeaderboardTotalScore : AbstractRegistryTest() {
leaderboard.getNameAt(1) shouldBe "Robocop"
}

@Test
fun `Should support pre-populating game params`() {
val leaderboard =
LeaderboardTotalScore(
GameType.ROUND_THE_CLOCK,
RoundTheClockConfig(ClockType.Trebles, false).toJson()
)

val filterPanel = leaderboard.getChild<GameParamFilterPanelRoundTheClock>()
filterPanel.getChild<JCheckBox>(text = "In order").isSelected shouldBe false
filterPanel.getChild<JRadioButton>(text = ClockType.Trebles.toString()).isSelected shouldBe
true
}

@Test
fun `Should omit irrelevant filters in party mode`() {
InjectedThings.partyMode = true

val leaderboard = LeaderboardTotalScore(GameType.X01)
leaderboard.findChild<GameParamFilterPanel>() shouldBe null
leaderboard.findChild<PlayerTypeFilterPanel>() shouldBe null
}

private fun LeaderboardTotalScore.rowCount() = table().rowCount

private fun LeaderboardTotalScore.getNameAt(row: Int) = table().getValueAt(row, 2)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package dartzee.screen.stats.overall

import com.github.alyssaburlton.swingtest.findAll
import com.github.alyssaburlton.swingtest.getChild
import dartzee.core.bean.ScrollTable
import dartzee.game.GameType
import dartzee.game.X01_PARTY_CONFIG
import dartzee.helper.AbstractTest
import dartzee.helper.insertFinishedParticipant
import dartzee.only
import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import org.junit.jupiter.api.Test

class TestSimplifiedLeaderboardScreen : AbstractTest() {
@Test
fun `Should show just one leaderboard of the right type`() {
val leaderboard = SimplifiedLeaderboardScreen().findAll<AbstractLeaderboard>().only()
leaderboard.shouldBeInstanceOf<LeaderboardTotalScore>()
}

@Test
fun `Should populate the leaderboard`() {
insertFinishedParticipant("Stuart", GameType.X01, 34, X01_PARTY_CONFIG.toJson())

val scrn = SimplifiedLeaderboardScreen()
scrn.initialise()

val leaderboard = scrn.getChild<LeaderboardTotalScore>()
leaderboard.getChild<ScrollTable>().rowCount shouldBe 1
}
}