Skip to content

Commit

Permalink
Merge pull request #308 from alyssaruth/party-mode-leaderboard
Browse files Browse the repository at this point in the history
Simplify leaderboard for party mode
  • Loading branch information
alyssaruth authored Mar 5, 2024
2 parents 7ca21c3 + 8fc7c74 commit da65cfa
Show file tree
Hide file tree
Showing 9 changed files with 124 additions and 17 deletions.
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
}
}

0 comments on commit da65cfa

Please sign in to comment.