Skip to content

Commit

Permalink
Merge pull request #318 from alyssaruth/party-player-selectors
Browse files Browse the repository at this point in the history
Party Mode - Tutorial and other tweaks
  • Loading branch information
alyssaruth authored Apr 13, 2024
2 parents 7fc209b + d0371e5 commit cd2f5e8
Show file tree
Hide file tree
Showing 25 changed files with 519 additions and 327 deletions.
25 changes: 19 additions & 6 deletions src/main/kotlin/dartzee/bean/AbstractPlayerSelector.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package dartzee.bean

import dartzee.core.bean.IDoubleClickListener
import dartzee.core.bean.ScrollTable
import dartzee.core.util.setBold
import dartzee.core.util.setFontSize
import dartzee.db.PlayerEntity
import dartzee.logging.CODE_SWING_ERROR
import dartzee.utils.InjectedThings
Expand All @@ -12,6 +14,7 @@ import java.awt.event.ActionListener
import java.awt.event.KeyEvent
import javax.swing.ImageIcon
import javax.swing.JButton
import javax.swing.JLabel
import javax.swing.JPanel
import net.miginfocom.swing.MigLayout

Expand All @@ -30,28 +33,38 @@ abstract class AbstractPlayerSelector<S : ScrollTable> :
val tablePlayersToSelectFrom = ScrollTable()
private val btnSelect = JButton("")
private val btnUnselect = JButton("")
private val lblAvailable = JLabel("Available")
protected val lblSelected = JLabel("Selected")

protected fun render() {
layout = MigLayout("al center center", "[452px][100px][452px]", "[407px]")
layout = MigLayout("al center center", "[452px][100px][452px]", "[20px][407px]")

tablePlayersToSelectFrom.name = "TableUnselected"

lblSelected.setFontSize(14)
lblAvailable.setFontSize(14)
lblAvailable.setBold()
lblSelected.setBold()

val panelMovementOptions = JPanel()
add(tablePlayersToSelectFrom, "cell 0 0,alignx left,growy")
add(lblAvailable, "cell 0 0, alignx center")
add(tablePlayersToSelectFrom, "cell 0 1,alignx left,growy")
panelMovementOptions.minimumSize = Dimension(50, 10)
add(panelMovementOptions, "cell 1 0,grow")
add(panelMovementOptions, "cell 1 1,grow")
panelMovementOptions.layout = MigLayout("al center center, wrap, gapy 20")
btnSelect.name = "Select"
btnSelect.icon =
ImageIcon(AbstractPlayerSelector::class.java.getResource("/buttons/rightArrow.png"))
btnSelect.preferredSize = Dimension(40, 40)
panelMovementOptions.add(btnSelect, "cell 0 0,alignx left,aligny top")
panelMovementOptions.add(btnSelect, "cell 0 1,alignx left,aligny top")
btnUnselect.name = "Unselect"
btnUnselect.icon =
ImageIcon(AbstractPlayerSelector::class.java.getResource("/buttons/leftArrow.png"))
btnUnselect.preferredSize = Dimension(40, 40)
panelMovementOptions.add(btnUnselect, "cell 0 1,alignx left,aligny top")
add(tablePlayersSelected, "cell 2 0,alignx left,growy")
panelMovementOptions.add(btnUnselect, "cell 0 2,alignx left,aligny top")

add(lblSelected, "cell 2 0, alignx center")
add(tablePlayersSelected, "cell 2 1,alignx left,growy")

tablePlayersSelected.addDoubleClickListener(this)
tablePlayersToSelectFrom.addDoubleClickListener(this)
Expand Down
2 changes: 2 additions & 0 deletions src/main/kotlin/dartzee/bean/GameSetupPlayerSelector.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dartzee.bean

import dartzee.core.bean.ScrollTableOrdered
import dartzee.core.util.DialogUtil
import dartzee.core.util.setMargins
import dartzee.db.MAX_PLAYERS
import java.awt.event.ActionEvent
import javax.swing.ImageIcon
Expand All @@ -17,6 +18,7 @@ class GameSetupPlayerSelector : AbstractPlayerSelector<ScrollTableOrdered>() {
btnPairs.icon = ImageIcon(javaClass.getResource("/buttons/teams.png"))
btnPairs.toolTipText = "Play in pairs"
tablePlayersSelected.addButtonToOrderingPanel(btnPairs, 3)
lblSelected.setMargins(0, 0, 0, 60)

btnPairs.addActionListener(this)
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/dartzee/core/util/ComponentUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ fun Component.setFontSize(size: Int) {
font = Font(font.name, font.style, size)
}

fun Component.setBold() {
font = font.deriveFont(Font.BOLD)
}

fun JComponent.setMargins(margin: Int) {
setMargins(margin, margin, margin, margin)
}
Expand Down
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
9 changes: 9 additions & 0 deletions src/main/kotlin/dartzee/screen/SimplePlayerSelectionScreen.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
package dartzee.screen

import dartzee.bean.GameSetupPlayerSelector
import dartzee.core.util.setFontSize
import dartzee.game.GameLaunchParams
import dartzee.game.GameType
import dartzee.game.X01_PARTY_CONFIG
import dartzee.utils.InjectedThings.gameLauncher
import java.awt.BorderLayout
import javax.swing.JLabel
import javax.swing.border.EmptyBorder

class SimplePlayerSelectionScreen : EmbeddedScreen() {
private val lblTitle = JLabel()
private val playerSelector = GameSetupPlayerSelector()

init {
lblTitle.setFontSize(32)
lblTitle.border = EmptyBorder(40, 10, 10, 10)
lblTitle.horizontalAlignment = JLabel.CENTER
lblTitle.text = "Select Players"
add(lblTitle, BorderLayout.NORTH)
add(playerSelector, BorderLayout.CENTER)
}

Expand Down
136 changes: 0 additions & 136 deletions src/main/kotlin/dartzee/screen/ai/NewSetupRuleDialog.kt

This file was deleted.

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
31 changes: 28 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,17 @@ 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.Dimension
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 = TutorialPanel(this)
var gamePanel: DartsGamePanel<*, *> = DartsGamePanel.factory(this, game, participants.size)
override val windowName = gamePanel.gameTitle

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

title = gamePanel.gameTitle

// Add the single game tab and set visible
if (InjectedThings.partyMode) {
contentPane.add(tutorialPanel)
size = Dimension(1000, 600)
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
Loading

0 comments on commit cd2f5e8

Please sign in to comment.