Skip to content

Commit

Permalink
plug in tutorial
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssaruth committed Apr 6, 2024
1 parent 0ee07e4 commit 0b2d791
Show file tree
Hide file tree
Showing 14 changed files with 76 additions and 58 deletions.
6 changes: 3 additions & 3 deletions src/main/kotlin/dartzee/game/GameLauncher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ class GameLauncher {
val participants = insertNewGameEntities(game.rowId, params)

// Construct the screen and factory a tab
val scrn = DartsGameScreen(game, params.teamCount())
val scrn = DartsGameScreen(game, participants)
scrn.isVisible = true
scrn.gamePanel.startNewGame(participants)
scrn.startNewGame()

logger.info(
CODE_GAME_LAUNCHED,
Expand Down Expand Up @@ -93,7 +93,7 @@ class GameLauncher {
private fun loadAndDisplaySingleGame(gameEntity: GameEntity) {
// We've found a game, so construct a screen and initialise it
val participants = loadParticipants(gameEntity.rowId)
val scrn = DartsGameScreen(gameEntity, participants.size)
val scrn = DartsGameScreen(gameEntity, participants)
scrn.isVisible = true

// Now try to load the game
Expand Down
4 changes: 0 additions & 4 deletions src/main/kotlin/dartzee/screen/DartsApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import dartzee.logging.KEY_CURRENT_SCREEN
import dartzee.logging.LoggingCode
import dartzee.main.exitApplication
import dartzee.`object`.DartsClient
import dartzee.screen.game.TutorialWindow
import dartzee.utils.DartsDatabaseUtil
import dartzee.utils.DevUtilities
import dartzee.utils.InjectedThings
Expand Down Expand Up @@ -174,9 +173,6 @@ class DartsApp(commandBar: CheatBar) : AbstractDevScreen(commandBar), WindowList
} else if (cmd == CMD_TEST) {
val window = TestWindow()
window.isVisible = true
} else if (cmd == "tutorial") {
val window = TutorialWindow()
window.isVisible = true
}

return textToShow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package dartzee.screen.game
import dartzee.achievements.AbstractAchievement
import dartzee.screen.FocusableWindow
import dartzee.screen.ScreenCache
import dartzee.utils.InjectedThings
import java.awt.Frame
import java.awt.event.WindowEvent
import java.awt.event.WindowListener
import javax.swing.WindowConstants

abstract class AbstractDartsGameScreen : FocusableWindow(), WindowListener {
var haveLostFocus = false
protected var shouldPack = true
protected var shouldPack = !InjectedThings.partyMode

init {
defaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE
Expand Down
29 changes: 26 additions & 3 deletions src/main/kotlin/dartzee/screen/game/DartsGameScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@ package dartzee.screen.game

import dartzee.achievements.AbstractAchievement
import dartzee.db.GameEntity
import dartzee.game.state.IWrappedParticipant
import dartzee.screen.ScreenCache
import dartzee.utils.InjectedThings
import java.awt.Frame

/** DartsGameScreen Simple screen which wraps up a single game panel */
class DartsGameScreen(game: GameEntity, totalPlayers: Int) : AbstractDartsGameScreen() {
var gamePanel: DartsGamePanel<*, *> = DartsGamePanel.factory(this, game, totalPlayers)
class DartsGameScreen(game: GameEntity, private val participants: List<IWrappedParticipant>) :
AbstractDartsGameScreen() {
private val tutorialPanel = TutorialWindow(this)
var gamePanel: DartsGamePanel<*, *> = DartsGamePanel.factory(this, game, participants.size)
override val windowName = gamePanel.gameTitle

init {
Expand All @@ -16,8 +21,26 @@ class DartsGameScreen(game: GameEntity, totalPlayers: Int) : AbstractDartsGameSc

title = gamePanel.gameTitle

// Add the single game tab and set visible
if (InjectedThings.partyMode) {
contentPane.add(tutorialPanel)
extendedState = Frame.MAXIMIZED_BOTH
} else {
contentPane.add(gamePanel)
}
}

fun startNewGame() {
if (!InjectedThings.partyMode) {
gamePanel.startNewGame(participants)
}
}

fun tutorialFinished() {
contentPane.remove(tutorialPanel)
contentPane.add(gamePanel)
repaint()

gamePanel.startNewGame(participants)
}

override fun fireAppearancePreferencesChanged() {
Expand Down
16 changes: 8 additions & 8 deletions src/main/kotlin/dartzee/screen/game/TutorialWindow.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@ import dartzee.utils.ResourceCache
import dartzee.utils.sumScore
import java.awt.BorderLayout
import java.awt.Dimension
import java.awt.Frame
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.ImageIcon
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JSeparator
Expand All @@ -25,7 +23,8 @@ import javax.swing.border.EmptyBorder
import javax.swing.border.EtchedBorder
import net.miginfocom.swing.MigLayout

class TutorialWindow : JFrame(), ActionListener, DartboardListener {
class TutorialWindow(private val parent: DartsGameScreen) :
JPanel(), ActionListener, DartboardListener {
private val dartsThrown = mutableListOf<Dart>()
private var scoreRemaining = 301

Expand All @@ -40,15 +39,14 @@ class TutorialWindow : JFrame(), ActionListener, DartboardListener {
private val lblScored = JLabel("0")

init {
contentPane.layout = BorderLayout(0, 0)
extendedState = Frame.MAXIMIZED_BOTH
layout = BorderLayout(0, 0)

// West Pane - the rules
val panelWest = JPanel()
panelWest.border = EtchedBorder(EtchedBorder.RAISED, null, null)
panelWest.layout = MigLayout("al center top")
panelWest.preferredSize = Dimension(500, 50)
contentPane.add(panelWest, BorderLayout.WEST)
add(panelWest, BorderLayout.WEST)

val lblRules = makeTitleLabel("The Rules")
panelWest.add(lblRules, "cell 0 0, growx")
Expand Down Expand Up @@ -78,7 +76,7 @@ class TutorialWindow : JFrame(), ActionListener, DartboardListener {
// Center Pane - Dartboard etc
val panelCenter = JPanel()
panelCenter.layout = BorderLayout(0, 0)
contentPane.add(panelCenter, BorderLayout.CENTER)
add(panelCenter, BorderLayout.CENTER)
panelCenter.add(dartboard, BorderLayout.CENTER)

// Center-North - Give it a Try! title
Expand Down Expand Up @@ -107,7 +105,7 @@ class TutorialWindow : JFrame(), ActionListener, DartboardListener {
// Center-East - Score indicators
val panelEast = JPanel()
panelEast.preferredSize = Dimension(160, 50)
contentPane.add(panelEast, BorderLayout.EAST)
add(panelEast, BorderLayout.EAST)
panelEast.layout = MigLayout("al center center")
val lblRemainingText = JLabel("Remaining:")
lblRemainingText.horizontalAlignment = SwingConstants.CENTER
Expand All @@ -125,6 +123,7 @@ class TutorialWindow : JFrame(), ActionListener, DartboardListener {
lblScored.setFontSize(18)

dartboard.addDartboardListener(this)
btnStartGame.addActionListener(this)
btnConfirm.addActionListener(this)
btnReset.addActionListener(this)
}
Expand Down Expand Up @@ -173,6 +172,7 @@ class TutorialWindow : JFrame(), ActionListener, DartboardListener {

override fun actionPerformed(e: ActionEvent?) {
when (e?.source) {
btnStartGame -> parent.tutorialFinished()
btnReset -> clearDarts()
btnConfirm -> confirmScore()
}
Expand Down
24 changes: 12 additions & 12 deletions src/test/kotlin/dartzee/e2e/GameHelpers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,26 +82,26 @@ fun closeOpenGames() {
ScreenCache.getDartsGameScreens().forEach { it.dispose() }
}

data class GamePanelTestSetup(val gamePanel: DartsGamePanel<*, *>, val listener: DartboardListener)
data class GamePanelTestSetup(
val gamePanel: DartsGamePanel<*, *>,
val listener: DartboardListener,
val participants: List<IWrappedParticipant>
)

fun setUpGamePanelAndStartGame(game: GameEntity, players: List<PlayerEntity>) =
setUpGamePanel(game).also { it.gamePanel.startGame(players) }
fun setUpGamePanelAndStartGame(game: GameEntity, players: List<PlayerEntity>): GamePanelTestSetup {
val participants = prepareParticipants(game.rowId, players, false)
return setUpGamePanel(game, participants).also { it.gamePanel.startNewGame(participants) }
}

fun setUpGamePanel(game: GameEntity, totalPlayers: Int = 1): GamePanelTestSetup {
val parentWindow = DartsGameScreen(game, totalPlayers)
fun setUpGamePanel(game: GameEntity, participants: List<IWrappedParticipant>): GamePanelTestSetup {
val parentWindow = DartsGameScreen(game, participants)
parentWindow.isVisible = true
val gamePanel = parentWindow.gamePanel

val listener = mockk<DartboardListener>(relaxed = true)
gamePanel.dartboard.addDartboardListener(listener)

return GamePanelTestSetup(gamePanel, listener)
}

fun DartsGamePanel<*, *>.startGame(players: List<PlayerEntity>): List<IWrappedParticipant> {
val participants = prepareParticipants(gameEntity.rowId, players, false)
startNewGame(participants)
return participants
return GamePanelTestSetup(gamePanel, listener, participants)
}

fun GameSetupPlayerSelector.selectTopPlayer() {
Expand Down
3 changes: 1 addition & 2 deletions src/test/kotlin/dartzee/e2e/TestDartzeeE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,6 @@ class TestDartzeeE2E : AbstractE2ETest() {
val game = insertGame(gameType = GameType.DARTZEE)
insertDartzeeRules(game.rowId, testRules)

val (gamePanel, listener) = setUpGamePanel(game)

val p1Rounds =
listOf(
listOf(makeDart(20, 1), makeDart(5, 1), makeDart(1, 1)), // Scoring round - 26
Expand Down Expand Up @@ -119,6 +117,7 @@ class TestDartzeeE2E : AbstractE2ETest() {
val p2 = makePlayerWithModel(p2Model, name = "Lynn", image = "BaboTwo")

val participants = prepareParticipants(game.rowId, listOf(p1, p2), true)
val (gamePanel, listener) = setUpGamePanel(game, participants)
gamePanel.startNewGame(participants)

awaitGameFinish(game)
Expand Down
5 changes: 2 additions & 3 deletions src/test/kotlin/dartzee/e2e/TestGolfE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ class TestGolfE2E : AbstractE2ETest() {
@Test
fun `E2E - Golf - Gambler, stop threshold`() {
val game = insertGame(gameType = GameType.GOLF, gameParams = "9")
val (gamePanel, listener) = setUpGamePanel(game)

val expectedRounds =
listOf(
Expand All @@ -99,7 +98,7 @@ class TestGolfE2E : AbstractE2ETest() {
val aiModel = predictableDartsModel(aimDarts)

val player = makePlayerWithModel(aiModel)
gamePanel.startGame(listOf(player))
val (gamePanel, listener) = setUpGamePanelAndStartGame(game, listOf(player))
awaitGameFinish(game)

verifyState(gamePanel, listener, expectedRounds, finalScore = 25, expectedScorerRows = 10)
Expand All @@ -124,7 +123,6 @@ class TestGolfE2E : AbstractE2ETest() {
@Test
fun `E2E - 9 holes - Team of 2`() {
val game = insertGame(gameType = GameType.GOLF, gameParams = "9")
val (gamePanel, listener) = setUpGamePanel(game)

val p1Rounds =
listOf(
Expand Down Expand Up @@ -167,6 +165,7 @@ class TestGolfE2E : AbstractE2ETest() {
val p2 = makePlayerWithModel(p2Model, name = "Lynn", image = "BaboTwo")

val participants = prepareParticipants(game.rowId, listOf(p1, p2), true)
val (gamePanel, listener) = setUpGamePanel(game, participants)
gamePanel.startNewGame(participants)
awaitGameFinish(game)

Expand Down
2 changes: 2 additions & 0 deletions src/test/kotlin/dartzee/e2e/TestPartyModeE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class TestPartyModeE2E : AbstractE2ETest() {
}
}

gameWindow.clickButton(text = "I'm ready - let's play!")

val gamePanel = gameWindow.getChild<DartsGamePanel<*, *>>()
gamePanel.throwHumanRound(drtOuterTwenty(), drtTrebleTwenty(), drtOuterTwenty()) // 201
gamePanel.throwHumanRound(drtOuterNineteen(), drtOuterNineteen(), drtInnerSeven()) // 256
Expand Down
12 changes: 6 additions & 6 deletions src/test/kotlin/dartzee/e2e/TestResignationE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ class TestResignationE2E : AbstractE2ETest() {
gameParams = X01Config(501, FinishType.Doubles).toJson()
)

val (gamePanel) = setUpGamePanel(game, 3)

val (winner, loser) = createPlayers()
val resignee = insertPlayer(strategy = "")

val (ptWinner, ptResignee, ptLoser) = gamePanel.startGame(listOf(winner, resignee, loser))
val (gamePanel, _, participants) =
setUpGamePanelAndStartGame(game, listOf(winner, resignee, loser))
val (ptWinner, ptResignee, ptLoser) = participants

gamePanel.awaitTurn(ptResignee)
gamePanel.throwHumanDart(20, SegmentType.OUTER_SINGLE)
Expand All @@ -52,12 +52,12 @@ class TestResignationE2E : AbstractE2ETest() {
fun `Resigning mid-game - Golf`() {
val game = insertGame(gameType = GameType.GOLF, gameParams = "9")

val (gamePanel) = setUpGamePanel(game, 3)

val (winner, loser) = createPlayers()
val resignee = insertPlayer(strategy = "")

val (ptWinner, ptResignee, ptLoser) = gamePanel.startGame(listOf(winner, resignee, loser))
val (gamePanel, _, participants) =
setUpGamePanelAndStartGame(game, listOf(winner, resignee, loser))
val (ptWinner, ptResignee, ptLoser) = participants

gamePanel.awaitTurn(ptResignee)
gamePanel.throwHumanDart(1, SegmentType.OUTER_SINGLE)
Expand Down
3 changes: 1 addition & 2 deletions src/test/kotlin/dartzee/e2e/TestResizeE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@ class TestResizeE2E : AbstractE2ETest() {
val aiModel = beastDartsModel()
val player = insertPlayer(model = aiModel)

val (gamePanel, listener) = setUpGamePanel(game)
val (gamePanel, listener) = setUpGamePanelAndStartGame(game, listOf(player))
gamePanel.setSize(300, 675)
gamePanel.preferredSize = Dimension(300, 675)
gamePanel.startGame(listOf(player))

awaitGameFinish(game)

Expand Down
6 changes: 2 additions & 4 deletions src/test/kotlin/dartzee/e2e/TestRoundTheClockE2E.kt
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ class TestRoundTheClockE2E : AbstractE2ETest() {
gameParams = RoundTheClockConfig(ClockType.Standard, false).toJson()
)

val (gamePanel, listener) = setUpGamePanel(game)

val expectedRounds =
listOf(
listOf(
Expand Down Expand Up @@ -124,7 +122,7 @@ class TestRoundTheClockE2E : AbstractE2ETest() {
val aiModel = predictableDartsModel(aimDarts, mercyThreshold = 7)

val player = makePlayerWithModel(aiModel)
gamePanel.startGame(listOf(player))
val (gamePanel, listener) = setUpGamePanelAndStartGame(game, listOf(player))
awaitGameFinish(game)

verifyState(gamePanel, listener, expectedRounds, scoreSuffix = " Darts", finalScore = 24)
Expand All @@ -145,7 +143,6 @@ class TestRoundTheClockE2E : AbstractE2ETest() {
gameType = GameType.ROUND_THE_CLOCK,
gameParams = RoundTheClockConfig(ClockType.Standard, true).toJson()
)
val (gamePanel, listener) = setUpGamePanel(game)

val p1Rounds =
listOf(
Expand Down Expand Up @@ -191,6 +188,7 @@ class TestRoundTheClockE2E : AbstractE2ETest() {
val p2 = makePlayerWithModel(p2Model, name = "Lynn", image = "BaboTwo")

val participants = prepareParticipants(game.rowId, listOf(p1, p2), true)
val (gamePanel, listener) = setUpGamePanel(game, participants)
gamePanel.startNewGame(participants)
awaitGameFinish(game)

Expand Down
Loading

0 comments on commit 0b2d791

Please sign in to comment.