Skip to content

Commit 1500036

Browse files
authored
Merge pull request #319 from alyssaruth/selector-avatars
[Party mode] Final player selection tweaks
2 parents 159c787 + 59b29bc commit 1500036

20 files changed

+236
-68
lines changed

src/main/kotlin/dartzee/bean/AbstractPlayerSelector.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ abstract class AbstractPlayerSelector<S : ScrollTable> :
3737
protected val lblSelected = JLabel("Selected")
3838

3939
protected fun render() {
40-
layout = MigLayout("al center center", "[452px][100px][452px]", "[20px][407px]")
40+
layout = MigLayout("al center center", "[grow][100px][grow]", "[20px][grow]")
4141

4242
tablePlayersToSelectFrom.name = "TableUnselected"
4343

@@ -48,7 +48,7 @@ abstract class AbstractPlayerSelector<S : ScrollTable> :
4848

4949
val panelMovementOptions = JPanel()
5050
add(lblAvailable, "cell 0 0, alignx center")
51-
add(tablePlayersToSelectFrom, "cell 0 1,alignx left,growy")
51+
add(tablePlayersToSelectFrom, "cell 0 1,alignx left,grow")
5252
panelMovementOptions.minimumSize = Dimension(50, 10)
5353
add(panelMovementOptions, "cell 1 1,grow")
5454
panelMovementOptions.layout = MigLayout("al center center, wrap, gapy 20")
@@ -64,11 +64,14 @@ abstract class AbstractPlayerSelector<S : ScrollTable> :
6464
panelMovementOptions.add(btnUnselect, "cell 0 2,alignx left,aligny top")
6565

6666
add(lblSelected, "cell 2 0, alignx center")
67-
add(tablePlayersSelected, "cell 2 1,alignx left,growy")
67+
add(tablePlayersSelected, "cell 2 1,alignx left,grow")
6868

6969
tablePlayersSelected.addDoubleClickListener(this)
7070
tablePlayersToSelectFrom.addDoubleClickListener(this)
7171

72+
tablePlayersToSelectFrom.setShowRowCount(false)
73+
tablePlayersSelected.setShowRowCount(false)
74+
7275
btnSelect.addActionListener(this)
7376
btnUnselect.addActionListener(this)
7477

src/main/kotlin/dartzee/bean/GameSetupPlayerSelector.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import dartzee.core.bean.ScrollTableOrdered
44
import dartzee.core.util.DialogUtil
55
import dartzee.core.util.setMargins
66
import dartzee.db.MAX_PLAYERS
7+
import dartzee.utils.InjectedThings
8+
import dartzee.utils.ResourceCache
9+
import java.awt.Font
710
import java.awt.event.ActionEvent
8-
import javax.swing.ImageIcon
911
import javax.swing.JToggleButton
1012

1113
class GameSetupPlayerSelector : AbstractPlayerSelector<ScrollTableOrdered>() {
@@ -15,7 +17,13 @@ class GameSetupPlayerSelector : AbstractPlayerSelector<ScrollTableOrdered>() {
1517
init {
1618
super.render()
1719

18-
btnPairs.icon = ImageIcon(javaClass.getResource("/buttons/teams.png"))
20+
if (InjectedThings.partyMode) {
21+
val font = ResourceCache.BASE_FONT.deriveFont(Font.PLAIN, 20f)
22+
tablePlayersToSelectFrom.setTableFont(font)
23+
tablePlayersSelected.setTableFont(font)
24+
}
25+
26+
btnPairs.icon = ResourceCache.ICON_TEAMS
1927
btnPairs.toolTipText = "Play in pairs"
2028
tablePlayersSelected.addButtonToOrderingPanel(btnPairs, 3)
2129
lblSelected.setMargins(0, 0, 0, 60)

src/main/kotlin/dartzee/bean/ScrollTablePlayers.kt

+12-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package dartzee.bean
33
import dartzee.core.bean.ScrollTable
44
import dartzee.core.util.TableUtil
55
import dartzee.db.PlayerEntity
6+
import dartzee.utils.InjectedThings
7+
import dartzee.utils.getImageForTableRow
68

79
fun ScrollTable.getSelectedPlayer(): PlayerEntity? {
810
val row = table.selectedRow
@@ -22,8 +24,13 @@ fun ScrollTable.initPlayerTableModel(players: List<PlayerEntity> = listOf()) {
2224

2325
this.model = model
2426

25-
setRowHeight(23)
26-
setColumnWidths("25")
27+
if (InjectedThings.partyMode) {
28+
setRowHeight(50)
29+
setColumnWidths("50")
30+
} else {
31+
setRowHeight(23)
32+
setColumnWidths("25")
33+
}
2734

2835
addPlayers(players)
2936

@@ -34,7 +41,9 @@ fun ScrollTable.initPlayerTableModel(players: List<PlayerEntity> = listOf()) {
3441
fun ScrollTable.addPlayers(players: List<PlayerEntity>) = players.forEach(::addPlayer)
3542

3643
private fun ScrollTable.addPlayer(player: PlayerEntity) {
37-
val flag = player.getFlag()
44+
val flag =
45+
if (InjectedThings.partyMode) getImageForTableRow(player.playerImageId)
46+
else player.getFlag()
3847
val row = arrayOf(flag, player)
3948

4049
addRow(row)

src/main/kotlin/dartzee/core/bean/ScrollTableHyperlink.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package dartzee.core.bean
33
import java.awt.Color
44
import java.awt.Component
55
import java.awt.Cursor
6-
import java.awt.Font
76
import java.awt.event.MouseEvent
87
import java.awt.font.TextAttribute
98
import javax.swing.JTable
@@ -96,7 +95,7 @@ abstract class ScrollTableHyperlink(private val linkColumnName: String, testId:
9695
}
9796

9897
override fun getTableCellRendererComponent(
99-
table: JTable?,
98+
table: JTable,
10099
value: Any?,
101100
isSelected: Boolean,
102101
hasFocus: Boolean,
@@ -119,7 +118,8 @@ abstract class ScrollTableHyperlink(private val linkColumnName: String, testId:
119118

120119
val fontAttributes = HashMap<TextAttribute, Int>()
121120
fontAttributes[TextAttribute.UNDERLINE] = TextAttribute.UNDERLINE_ON
122-
val hyperlinkFont = Font("Tahoma", Font.BOLD, 12).deriveFont(fontAttributes)
121+
fontAttributes[TextAttribute.SIZE] = table.font.size
122+
val hyperlinkFont = table.font.deriveFont(fontAttributes)
123123

124124
font = hyperlinkFont
125125

src/main/kotlin/dartzee/core/bean/SwingExtensions.kt

+12
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import javax.swing.JComponent
1616
import javax.swing.JScrollPane
1717
import javax.swing.JTable
1818
import javax.swing.JTextField
19+
import javax.swing.JTextPane
1920
import javax.swing.KeyStroke
21+
import javax.swing.UIDefaults
2022
import javax.swing.text.JTextComponent
2123

2224
fun <K> JComboBox<K>.items() = (0 until model.size).map { model.getElementAt(it) }
@@ -94,3 +96,13 @@ fun JScrollPane.scrollToBottom() {
9496
val vertical = verticalScrollBar
9597
vertical.value = vertical.maximum
9698
}
99+
100+
fun makeTransparentTextPane() =
101+
JTextPane().apply {
102+
val uiDefault = UIDefaults()
103+
uiDefault["EditorPane[Enabled].backgroundPainter"] = null
104+
putClientProperty("Nimbus.Overrides", uiDefault)
105+
putClientProperty("Nimbus.Overrides.InheritDefaults", false)
106+
background = null
107+
isEditable = false
108+
}

src/main/kotlin/dartzee/core/util/ComponentUtil.kt

+6
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ fun Component.setFontSize(size: Int) {
102102
font = Font(font.name, font.style, size)
103103
}
104104

105+
fun JTextPane.alignCentrally() {
106+
val center = SimpleAttributeSet()
107+
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER)
108+
styledDocument.setParagraphAttributes(0, styledDocument.length, center, false)
109+
}
110+
105111
fun Component.setBold() {
106112
font = font.deriveFont(Font.BOLD)
107113
}

src/main/kotlin/dartzee/screen/SimplePlayerSelectionScreen.kt

+29-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package dartzee.screen
22

33
import dartzee.bean.GameSetupPlayerSelector
4+
import dartzee.core.bean.makeTransparentTextPane
5+
import dartzee.core.util.alignCentrally
6+
import dartzee.core.util.append
47
import dartzee.core.util.setFontSize
58
import dartzee.game.GameLaunchParams
69
import dartzee.game.GameType
710
import dartzee.game.X01_PARTY_CONFIG
811
import dartzee.utils.InjectedThings.gameLauncher
12+
import dartzee.utils.ResourceCache
913
import java.awt.BorderLayout
1014
import javax.swing.JLabel
15+
import javax.swing.JPanel
1116
import javax.swing.border.EmptyBorder
1217

1318
class SimplePlayerSelectionScreen : EmbeddedScreen() {
@@ -18,8 +23,29 @@ class SimplePlayerSelectionScreen : EmbeddedScreen() {
1823
lblTitle.setFontSize(32)
1924
lblTitle.border = EmptyBorder(40, 10, 10, 10)
2025
lblTitle.horizontalAlignment = JLabel.CENTER
21-
lblTitle.text = "Select Players"
22-
add(lblTitle, BorderLayout.NORTH)
26+
lblTitle.text = "Game Setup"
27+
28+
val panelNorth = JPanel()
29+
panelNorth.layout = BorderLayout(0, 0)
30+
add(panelNorth, BorderLayout.NORTH)
31+
panelNorth.add(lblTitle, BorderLayout.NORTH)
32+
33+
val textPane =
34+
makeTransparentTextPane().apply {
35+
alignCentrally()
36+
setFontSize(18)
37+
border = EmptyBorder(0, 0, 25, 0)
38+
39+
append("Select who is playing using the controls below. Play in pairs using the ")
40+
val lbl = JLabel(ResourceCache.ICON_TEAMS)
41+
lbl.alignmentY = 0.75f
42+
insertComponent(lbl)
43+
append(" button.")
44+
append("\n")
45+
append("Change the order players throw in using the other buttons.")
46+
}
47+
panelNorth.add(textPane, BorderLayout.CENTER)
48+
2349
add(playerSelector, BorderLayout.CENTER)
2450
}
2551

@@ -47,5 +73,5 @@ class SimplePlayerSelectionScreen : EmbeddedScreen() {
4773

4874
override fun showNextButton() = true
4975

50-
override fun getScreenName() = "Select Players"
76+
override fun getScreenName() = "Game Setup"
5177
}

src/main/kotlin/dartzee/screen/game/DartsGameScreen.kt

+6-4
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,26 @@ class DartsGameScreen(game: GameEntity, private val participants: List<IWrappedP
2121
ScreenCache.addDartsGameScreen(gameId, this)
2222

2323
title = gamePanel.gameTitle
24+
contentPane.add(gamePanel)
2425

2526
if (InjectedThings.partyMode) {
26-
contentPane.add(tutorialPanel)
2727
size = Dimension(1000, 600)
2828
extendedState = Frame.MAXIMIZED_BOTH
29-
} else {
30-
contentPane.add(gamePanel)
3129
}
3230
}
3331

3432
fun startNewGame() {
3533
if (!InjectedThings.partyMode) {
3634
gamePanel.startNewGame(participants)
35+
} else {
36+
contentPane.removeAll()
37+
contentPane.add(tutorialPanel)
38+
repaint()
3739
}
3840
}
3941

4042
fun tutorialFinished() {
41-
contentPane.remove(tutorialPanel)
43+
contentPane.removeAll()
4244
contentPane.add(gamePanel)
4345
repaint()
4446

src/main/kotlin/dartzee/screen/game/GameStatisticsHeaderRenderer.kt

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
package dartzee.screen.game
22

3+
import dartzee.core.util.alignCentrally
34
import java.awt.Color
45
import java.awt.Component
56
import java.awt.Font
67
import javax.swing.JTable
78
import javax.swing.JTextPane
89
import javax.swing.border.MatteBorder
910
import javax.swing.table.TableCellRenderer
10-
import javax.swing.text.SimpleAttributeSet
11-
import javax.swing.text.StyleConstants
1211

1312
class GameStatisticsHeaderRenderer : JTextPane(), TableCellRenderer {
1413
init {
15-
val doc = this.styledDocument
16-
val center = SimpleAttributeSet()
17-
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER)
18-
doc.setParagraphAttributes(0, doc.length, center, false)
14+
alignCentrally()
1915
}
2016

2117
override fun getTableCellRendererComponent(

src/main/kotlin/dartzee/screen/game/TutorialPanel.kt

+2-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dartzee.screen.game
22

3+
import dartzee.core.bean.makeTransparentTextPane
34
import dartzee.core.util.append
45
import dartzee.core.util.setFontSize
56
import dartzee.listener.DartboardListener
@@ -19,11 +20,9 @@ import javax.swing.JLabel
1920
import javax.swing.JPanel
2021
import javax.swing.JScrollPane
2122
import javax.swing.JSeparator
22-
import javax.swing.JTextPane
2323
import javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
2424
import javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
2525
import javax.swing.SwingConstants
26-
import javax.swing.UIDefaults
2726
import javax.swing.border.EmptyBorder
2827
import javax.swing.border.EtchedBorder
2928
import net.miginfocom.swing.MigLayout
@@ -140,13 +139,7 @@ class TutorialPanel(private val parent: DartsGameScreen) :
140139
}
141140

142141
private fun makeTextPane() =
143-
JTextPane().apply {
144-
val uiDefault = UIDefaults()
145-
uiDefault["EditorPane[Enabled].backgroundPainter"] = null
146-
putClientProperty("Nimbus.Overrides", uiDefault)
147-
putClientProperty("Nimbus.Overrides.InheritDefaults", false)
148-
background = null
149-
isEditable = false
142+
makeTransparentTextPane().apply {
150143
font = ResourceCache.UNICODE_FONT
151144
setFontSize(24)
152145
border = EmptyBorder(10, 5, 20, 5)

src/main/kotlin/dartzee/screen/stats/overall/LeaderboardTotalScore.kt

+35-7
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@ import dartzee.preferences.Preferences
1010
import dartzee.utils.InjectedThings.mainDatabase
1111
import dartzee.utils.InjectedThings.partyMode
1212
import dartzee.utils.InjectedThings.preferenceService
13+
import dartzee.utils.ResourceCache
1314
import dartzee.utils.combinePlayerFlags
1415
import dartzee.utils.doesHighestWin
1516
import dartzee.utils.getFilterPanel
17+
import dartzee.utils.getImageForTableRow
18+
import dartzee.utils.getRawImageForTableRow
19+
import dartzee.utils.splitAvatar
1620
import java.awt.BorderLayout
1721
import java.awt.Dimension
22+
import java.awt.Font
1823
import java.awt.event.ActionListener
1924
import javax.swing.JPanel
2025
import javax.swing.JRadioButton
@@ -88,6 +93,14 @@ class LeaderboardTotalScore(private val gameType: GameType, gameParams: String?
8893
model.addRows(rows)
8994

9095
table.model = model
96+
97+
if (partyMode) {
98+
table.setRowHeight(50)
99+
100+
val font = ResourceCache.BASE_FONT.deriveFont(Font.PLAIN, 20f)
101+
table.setTableFont(font)
102+
}
103+
91104
table.setColumnWidths("35;50")
92105
table.sortBy(0, false)
93106
}
@@ -109,7 +122,7 @@ class LeaderboardTotalScore(private val gameType: GameType, gameParams: String?
109122
val playerWhereSql = panelPlayerFilters.getWhereSql()
110123

111124
val sb = StringBuilder()
112-
sb.append("SELECT p.Strategy, p.Name, g.LocalId, pt.FinalScore")
125+
sb.append("SELECT p.Strategy, p.Name, p.PlayerImageId, g.LocalId, pt.FinalScore")
113126
sb.append(" FROM Participant pt, Game g, Player p")
114127
sb.append(" WHERE pt.GameId = g.RowId")
115128
sb.append(" AND pt.PlayerId = p.RowId")
@@ -129,7 +142,10 @@ class LeaderboardTotalScore(private val gameType: GameType, gameParams: String?
129142
val localId = rs.getLong("LocalId")
130143
val score = rs.getInt("FinalScore")
131144

132-
val flag = PlayerEntity.getPlayerFlag(strategy.isEmpty())
145+
val flag =
146+
if (partyMode) getImageForTableRow(rs.getString("PlayerImageId"))
147+
else PlayerEntity.getPlayerFlag(strategy.isEmpty())
148+
133149
LeaderboardEntry(score, listOf(flag, playerName, localId, score))
134150
}
135151
}
@@ -140,7 +156,8 @@ class LeaderboardTotalScore(private val gameType: GameType, gameParams: String?
140156

141157
val sb = StringBuilder()
142158
sb.append(
143-
"SELECT p1.Strategy, p2.Strategy AS Strategy2, p1.Name, p2.Name as Name2, g.LocalId, t.FinalScore"
159+
"SELECT p1.Strategy, p2.Strategy AS Strategy2, p1.Name, p2.Name as Name2, " +
160+
"p1.PlayerImageId, p2.PlayerImageId as PlayerImageId2, g.LocalId, t.FinalScore"
144161
)
145162
sb.append(" FROM Team t, Participant pt1, Participant pt2, Game g, Player p1, Player p2")
146163
sb.append(" WHERE t.GameId = g.RowId")
@@ -169,12 +186,23 @@ class LeaderboardTotalScore(private val gameType: GameType, gameParams: String?
169186
val localId = rs.getLong("LocalId")
170187
val score = rs.getInt("FinalScore")
171188

172-
val playerFlag = PlayerEntity.getPlayerFlag(strategy.isEmpty())
173-
val playerFlag2 = PlayerEntity.getPlayerFlag(strategy2.isEmpty())
174-
val combinedFlag = combinePlayerFlags(playerFlag, playerFlag2)
189+
val icon =
190+
if (partyMode) {
191+
val imageIdOne = rs.getString("PlayerImageId")
192+
val imageIdTwo = rs.getString("PlayerImageId2")
193+
194+
val imgOne = getRawImageForTableRow(imageIdOne)
195+
val imgTwo = getRawImageForTableRow(imageIdTwo)
196+
splitAvatar(imgOne, imgTwo, null, true)
197+
} else {
198+
val playerFlag = PlayerEntity.getPlayerFlag(strategy.isEmpty())
199+
val playerFlag2 = PlayerEntity.getPlayerFlag(strategy2.isEmpty())
200+
combinePlayerFlags(playerFlag, playerFlag2)
201+
}
202+
175203
val playerName = "$playerName1 & $playerName2"
176204

177-
LeaderboardEntry(score, listOf(combinedFlag, playerName, localId, score))
205+
LeaderboardEntry(score, listOf(icon, playerName, localId, score))
178206
}
179207
}
180208

0 commit comments

Comments
 (0)