Code Sketch
Bixuu PrimalPowerAscensionEvent6
Category: Programming
import java.awt.BorderLayout
import java.awt.Color
import java.awt.Dimension
import java.awt.Font
import java.awt.GradientPaint
import java.awt.Graphics
import java.awt.Graphics2D
import java.awt.RenderingHints
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import java.awt.geom.Ellipse2D
import java.awt.geom.Line2D
import javax.swing.AbstractAction
import javax.swing.BorderFactory
import javax.swing.Box
import javax.swing.BoxLayout
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JComponent
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JTextField
import javax.swing.KeyStroke
import javax.swing.SwingConstants
import javax.swing.SwingUtilities
import javax.swing.Timer
import javax.swing.WindowConstants
import java.util.Random
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
object PrimalPowerAscensionEvent6 {
def main(args: Array[String]): Unit = {
SwingUtilities.invokeLater(new Runnable {
override def run(): Unit = {
val app = new PrimalPowerApp()
app.showWindow()
}
})
}
private class PrimalPowerApp {
private val frame = new JFrame("INFINITY REALMS SEASON 06 - PRIMAL POWER ASCENSION")
private val cardLayout = new java.awt.CardLayout()
private val root = new JPanel(cardLayout)
private val nameField = new JTextField("Hero", 18)
private val loginMessage = new JLabel("ENTER YOUR NAME TO BEGIN", SwingConstants.CENTER)
private val welcomeLabel = new JLabel("WELCOME, HERO", SwingConstants.CENTER)
private var playerName = "Hero"
private var selectedPower = "Blaze Burst"
private var activeGame: PrimalGamePanel = null
def showWindow(): Unit = {
root.add(buildLoginCard(), "LOGIN")
root.add(buildMenuCard(), "MENU")
root.add(buildPowerCard(), "POWERS")
root.add(buildControlsCard(), "CONTROLS")
frame.setContentPane(root)
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
frame.addWindowListener(new WindowAdapter {
override def windowClosing(e: WindowEvent): Unit = {
if (activeGame != null) activeGame.stopLoop()
}
})
frame.setMinimumSize(new Dimension(900, 650))
frame.pack()
frame.setLocationRelativeTo(null)
frame.setVisible(true)
cardLayout.show(root, "LOGIN")
}
private def styledButton(text: String): JButton = {
val button = new JButton(text)
button.setFont(new Font("SansSerif", Font.BOLD, 16))
button.setForeground(new Color(235, 250, 255))
button.setBackground(new Color(31, 87, 112))
button.setFocusPainted(false)
button.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(new Color(76, 226, 220), 2),
BorderFactory.createEmptyBorder(10, 18, 10, 18)
))
button.setAlignmentX(0.5f)
button
}
private def titleLabel(text: String, size: Int): JLabel = {
val label = new JLabel(text, SwingConstants.CENTER)
label.setFont(new Font("SansSerif", Font.BOLD, size))
label.setForeground(new Color(213, 255, 239))
label.setAlignmentX(0.5f)
label
}
private def basePanel(): JPanel = {
val panel = new JPanel()
panel.setBackground(new Color(8, 19, 37))
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS))
panel.setBorder(BorderFactory.createEmptyBorder(28, 40, 28, 40))
panel
}
private def buildLoginCard(): JPanel = {
val panel = basePanel()
panel.add(Box.createVerticalGlue())
panel.add(titleLabel("INFINITY REALMS SEASON 06", 27))
panel.add(Box.createVerticalStrut(10))
panel.add(titleLabel("PRIMAL POWER ASCENSION", 34))
panel.add(Box.createVerticalStrut(18))
panel.add(titleLabel("CHOOSE YOUR NAME. AWAKEN YOUR POWER.", 15))
panel.add(Box.createVerticalStrut(28))
nameField.setMaximumSize(new Dimension(310, 42))
nameField.setFont(new Font("SansSerif", Font.PLAIN, 18))
nameField.setHorizontalAlignment(SwingConstants.CENTER)
panel.add(nameField)
panel.add(Box.createVerticalStrut(14))
loginMessage.setForeground(new Color(255, 204, 112))
loginMessage.setFont(new Font("SansSerif", Font.BOLD, 13))
panel.add(loginMessage)
panel.add(Box.createVerticalStrut(18))
val startButton = styledButton("ENTER THE POWER REALM")
startButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = {
val typedName = nameField.getText.trim
if (typedName.length > 0) {
playerName = typedName.take(18)
welcomeLabel.setText("WELCOME, " + playerName.toUpperCase)
cardLayout.show(root, "MENU")
} else {
loginMessage.setText("PLEASE ENTER A PLAYER NAME")
}
}
})
panel.add(startButton)
panel.add(Box.createVerticalGlue())
panel
}
private def buildMenuCard(): JPanel = {
val panel = basePanel()
panel.add(Box.createVerticalGlue())
panel.add(titleLabel("PRIMAL POWER ASCENSION", 32))
panel.add(Box.createVerticalStrut(12))
welcomeLabel.setFont(new Font("SansSerif", Font.BOLD, 17))
welcomeLabel.setForeground(new Color(255, 215, 130))
panel.add(welcomeLabel)
panel.add(Box.createVerticalStrut(12))
panel.add(titleLabel("Collect Energy ? Master Powers ? Save the Primal Core", 15))
panel.add(Box.createVerticalStrut(28))
val playButton = styledButton("START ASCENSION")
playButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = startGame()
})
val powersButton = styledButton("CHOOSE YOUR SUPERPOWER")
powersButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = cardLayout.show(root, "POWERS")
})
val controlsButton = styledButton("HOW TO PLAY")
controlsButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = cardLayout.show(root, "CONTROLS")
})
panel.add(playButton)
panel.add(Box.createVerticalStrut(12))
panel.add(powersButton)
panel.add(Box.createVerticalStrut(12))
panel.add(controlsButton)
panel.add(Box.createVerticalGlue())
panel
}
private def buildPowerCard(): JPanel = {
val panel = basePanel()
panel.add(Box.createVerticalGlue())
panel.add(titleLabel("SELECT YOUR SUPERPOWER", 29))
panel.add(Box.createVerticalStrut(12))
panel.add(titleLabel("Choose one power. You can change it between runs.", 14))
panel.add(Box.createVerticalStrut(24))
val choices = Array(
("Blaze Burst", "F - Fire ring tags nearby rogue bots"),
("Frost Pulse", "F - Freeze nearby rogue bots"),
("Thunder Dash", "F - Super-speed dash across the arena"),
("Nature Shield", "F - Restore a protective energy shield")
)
var i = 0
while (i < choices.length) {
val choice = choices(i)
val button = styledButton(choice._1 + " | " + choice._2)
button.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = {
selectedPower = choice._1
cardLayout.show(root, "MENU")
}
})
panel.add(button)
panel.add(Box.createVerticalStrut(9))
i += 1
}
val backButton = styledButton("BACK TO MENU")
backButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = cardLayout.show(root, "MENU")
})
panel.add(Box.createVerticalStrut(8))
panel.add(backButton)
panel.add(Box.createVerticalGlue())
panel
}
private def buildControlsCard(): JPanel = {
val panel = basePanel()
panel.add(Box.createVerticalGlue())
panel.add(titleLabel("HOW TO PLAY", 30))
panel.add(Box.createVerticalStrut(20))
val info = new JLabel("<html><div style='text-align:center;'>" +
"W A S D / ARROWS - Move your hero<br><br>" +
"SPACE - Dash<br><br>" +
"F - Use your selected superpower (costs energy)<br><br>" +
"Q - Temporary shield (costs energy)<br><br>" +
"Collect glowing energy orbs and avoid rogue bots.<br>" +
"Collect every orb in a wave to unlock the next arena.<br><br>" +
"R - Restart after winning or losing<br>B / ESC - Back to menu<br><br>" +
"This is a friendly arcade challenge. Tag the bots with energy powers!" +
"</div></html>")
info.setForeground(new Color(213, 235, 250))
info.setFont(new Font("SansSerif", Font.PLAIN, 16))
info.setAlignmentX(0.5f)
panel.add(info)
panel.add(Box.createVerticalStrut(26))
val backButton = styledButton("BACK TO MENU")
backButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = cardLayout.show(root, "MENU")
})
panel.add(backButton)
panel.add(Box.createVerticalGlue())
panel
}
private def startGame(): Unit = {
if (activeGame != null) {
activeGame.stopLoop()
root.remove(activeGame)
}
activeGame = new PrimalGamePanel(playerName, selectedPower, () => {
if (activeGame != null) activeGame.stopLoop()
cardLayout.show(root, "MENU")
})
root.add(activeGame, "GAME")
cardLayout.show(root, "GAME")
root.revalidate()
root.repaint()
activeGame.startLoop()
}
private class PrimalGamePanel(heroName: String, powerName: String, backAction: () => Unit) extends JPanel(new BorderLayout()) {
private val hud = new JLabel("", SwingConstants.CENTER)
private val footer = new JLabel("WASD Move SPACE Dash F Power Q Shield B Back", SwingConstants.CENTER)
private val arena = new ArenaPanel()
private val timer = new Timer(20, new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = {
updateGame()
arena.repaint()
updateHud()
}
})
hud.setOpaque(true)
hud.setBackground(new Color(8, 23, 43))
hud.setForeground(new Color(226, 255, 237))
hud.setFont(new Font("SansSerif", Font.BOLD, 15))
hud.setBorder(BorderFactory.createEmptyBorder(9, 5, 9, 5))
footer.setOpaque(true)
footer.setBackground(new Color(8, 23, 43))
footer.setForeground(new Color(174, 222, 240))
footer.setFont(new Font("SansSerif", Font.PLAIN, 13))
footer.setBorder(BorderFactory.createEmptyBorder(7, 5, 7, 5))
private val buttonBar = new JPanel()
buttonBar.setBackground(new Color(8, 23, 43))
private val pauseButton = new JButton("PAUSE")
private val restartButton = new JButton("RESTART")
private val backButton = new JButton("BACK TO MENU")
pauseButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = togglePause()
})
restartButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = restartRun()
})
backButton.addActionListener(new ActionListener {
override def actionPerformed(e: ActionEvent): Unit = backAction()
})
buttonBar.add(pauseButton)
buttonBar.add(restartButton)
buttonBar.add(backButton)
add(hud, BorderLayout.NORTH)
add(arena, BorderLayout.CENTER)
val bottom = new JPanel(new BorderLayout())
bottom.add(footer, BorderLayout.NORTH)
bottom.add(buttonBar, BorderLayout.SOUTH)
add(bottom, BorderLayout.SOUTH)
updateHud()
def startLoop(): Unit = {
timer.start()
arena.requestFocusInWindow()
}
def stopLoop(): Unit = timer.stop()
private class Orb(var x: Double, var y: Double) {
var collected = false
}
private class Bot(var x: Double, var y: Double) {
var frozenTicks = 0
var taggedTicks = 0
var active = true
}
private val random = new Random()
private val keys = mutable.Set[String]()
private val orbs = ArrayBuffer[Orb]()
private val bots = ArrayBuffer[Bot]()
private var playerX = 440.0
private var playerY = 350.0
private var health = 100
private var energy = 0
private var score = 0
private var wave = 1
private var orbTarget = 6
private var shieldTicks = 0
private var dashTicks = 0
private var dashCooldown = 0
private var powerCooldown = 0
private var hitCooldown = 0
private var frostTicks = 0
private var paused = false
private var lost = false
private var won = false
private var statusText = "Collect all glowing energy orbs!"
private var mouseTargetActive = false
private var mouseTargetX = 440.0
private var mouseTargetY = 350.0
private def bindKey(stroke: String, name: String)(action: => Unit): Unit = {
arena.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(stroke), name)
arena.getActionMap.put(name, new AbstractAction {
override def actionPerformed(e: ActionEvent): Unit = action
})
}
private def installKeys(): Unit = {
val directions = Array("W", "A", "S", "D", "UP", "DOWN", "LEFT", "RIGHT")
var i = 0
while (i < directions.length) {
val key = directions(i)
bindKey("pressed " + key, "down_" + key) { keys += key }
bindKey("released " + key, "up_" + key) { keys -= key }
i += 1
}
bindKey("pressed SPACE", "dash") { activateDash() }
bindKey("pressed F", "power") { activatePower() }
bindKey("pressed Q", "shield") { activateShield() }
bindKey("pressed P", "pause") { togglePause() }
bindKey("pressed B", "back") { backAction() }
bindKey("pressed ESCAPE", "escape") { backAction() }
bindKey("pressed R", "restart") { if (lost || won) restartRun() }
}
installKeys()
arena.setFocusable(true)
arena.addMouseListener(new MouseAdapter {
override def mousePressed(e: MouseEvent): Unit = {
if (!paused && !lost && !won) {
mouseTargetX = e.getX.toDouble
mouseTargetY = e.getY.toDouble
mouseTargetActive = true
arena.requestFocusInWindow()
}
}
})
spawnWave()
private def spawnWave(): Unit = {
orbs.clear()
bots.clear()
orbTarget = 5 + wave
var i = 0
while (i < orbTarget) {
val ox = 70 + random.nextInt(760)
val oy = 95 + random.nextInt(380)
orbs += new Orb(ox.toDouble, oy.toDouble)
i += 1
}
val botCount = 1 + wave
i = 0
while (i < botCount) {
val bx = 90 + random.nextInt(740)
val by = 100 + random.nextInt(350)
bots += new Bot(bx.toDouble, by.toDouble)
i += 1
}
playerX = 440.0
playerY = 350.0
statusText = "WAVE " + wave + " - collect " + orbTarget + " energy orbs!"
}
private def distance(x1: Double, y1: Double, x2: Double, y2: Double): Double = {
val dx = x1 - x2
val dy = y1 - y2
Math.sqrt(dx * dx + dy * dy)
}
private def activateDash(): Unit = {
if (!paused && !lost && !won && dashCooldown <= 0) {
dashTicks = 14
dashCooldown = 55
statusText = "THUNDER DASH!"
}
}
private def activateShield(): Unit = {
if (!paused && !lost && !won && energy >= 1 && shieldTicks <= 0) {
energy -= 1
shieldTicks = 170
statusText = "PRIMAL SHIELD ACTIVE!"
} else if (energy < 1) {
statusText = "Collect an energy orb to charge your shield."
}
}
private def activatePower(): Unit = {
if (paused || lost || won || powerCooldown > 0) return
if (energy < 2) {
statusText = "You need 2 energy to use " + powerName + "."
return
}
energy -= 2
powerCooldown = 70
if (powerName == "Blaze Burst") {
var tagged = 0
bots.foreach { bot =>
if (bot.active && distance(playerX, playerY, bot.x, bot.y) < 190.0) {
bot.active = false
tagged += 1
}
}
score += tagged * 30
statusText = "BLAZE BURST! Tagged " + tagged + " rogue bots."
} else if (powerName == "Frost Pulse") {
bots.foreach { bot => if (bot.active) bot.frozenTicks = 170 }
statusText = "FROST PULSE! Bots are frozen."
} else if (powerName == "Thunder Dash") {
dashTicks = 48
dashCooldown = 20
statusText = "THUNDER DASH ASCENSION!"
} else {
shieldTicks = 260
health = Math.min(100, health + 20)
statusText = "NATURE SHIELD! Health restored."
}
}
private def updateGame(): Unit = {
if (paused || lost || won) return
if (dashCooldown > 0) dashCooldown -= 1
if (powerCooldown > 0) powerCooldown -= 1
if (shieldTicks > 0) shieldTicks -= 1
if (dashTicks > 0) dashTicks -= 1
if (hitCooldown > 0) hitCooldown -= 1
if (frostTicks > 0) frostTicks -= 1
var speed = 3.2 + Math.min(2.0, energy * 0.08)
if (dashTicks > 0) speed *= 2.5
var movedByKeys = false
if (keys.contains("W") || keys.contains("UP")) { playerY -= speed; movedByKeys = true }
if (keys.contains("S") || keys.contains("DOWN")) { playerY += speed; movedByKeys = true }
if (keys.contains("A") || keys.contains("LEFT")) { playerX -= speed; movedByKeys = true }
if (keys.contains("D") || keys.contains("RIGHT")) { playerX += speed; movedByKeys = true }
if (!movedByKeys && mouseTargetActive) {
val d = distance(playerX, playerY, mouseTargetX, mouseTargetY)
if (d < 7.0) {
mouseTargetActive = false
} else {
playerX += ((mouseTargetX - playerX) / d) * speed
playerY += ((mouseTargetY - playerY) / d) * speed
}
}
playerX = Math.max(28.0, Math.min(872.0, playerX))
playerY = Math.max(78.0, Math.min(510.0, playerY))
orbs.foreach { orb =>
if (!orb.collected && distance(playerX, playerY, orb.x, orb.y) < 25.0) {
orb.collected = true
energy += 1
score += 25
health = Math.min(100, health + 2)
statusText = "ENERGY COLLECTED! Speed and power energy increased."
}
}
bots.foreach { bot =>
if (bot.active) {
if (bot.frozenTicks > 0) {
bot.frozenTicks -= 1
} else {
val d = distance(playerX, playerY, bot.x, bot.y)
if (d > 1.0) {
val botSpeed = 0.72 + wave * 0.10
bot.x += ((playerX - bot.x) / d) * botSpeed
bot.y += ((playerY - bot.y) / d) * botSpeed
}
if (d < 25.0 && hitCooldown <= 0 && shieldTicks <= 0) {
health -= 10
hitCooldown = 45
statusText = "A ROGUE BOT TAGGED YOU! Use Q for a shield."
if (health <= 0) {
health = 0
lost = true
statusText = "POWER DEPLETED - PRESS R TO TRY AGAIN"
}
}
}
}
}
var collectedCount = 0
orbs.foreach { orb => if (orb.collected) collectedCount += 1 }
if (collectedCount >= orbTarget) {
score += wave * 100
if (wave >= 5) {
won = true
statusText = "PRIMAL CORE AWAKENED! YOU ARE THE ASCENDED CHAMPION!"
} else {
wave += 1
health = Math.min(100, health + 18)
spawnWave()
}
}
}
private def updateHud(): Unit = {
val pauseText = if (paused) " | PAUSED" else ""
hud.setText(" " + heroName + " | POWER: " + powerName + " | WAVE: " + wave + "/5 | HEALTH: " + health +
" | ENERGY: " + energy + " | SCORE: " + score + pauseText + " ")
pauseButton.setText(if (paused) "RESUME" else "PAUSE")
}
def togglePause(): Unit = {
if (!lost && !won) paused = !paused
updateHud()
arena.repaint()
}
def restartRun(): Unit = {
health = 100
energy = 0
score = 0
wave = 1
shieldTicks = 0
dashTicks = 0
dashCooldown = 0
powerCooldown = 0
hitCooldown = 0
paused = false
lost = false
won = false
keys.clear()
spawnWave()
updateHud()
arena.repaint()
if (!timer.isRunning) timer.start()
arena.requestFocusInWindow()
}
private class ArenaPanel extends JPanel {
setPreferredSize(new Dimension(900, 560))
setBackground(new Color(5, 17, 34))
setFocusable(true)
override def paintComponent(graphics: Graphics): Unit = {
super.paintComponent(graphics)
val g = graphics.create().asInstanceOf[Graphics2D]
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
val w = getWidth
val h = getHeight
g.setPaint(new GradientPaint(0, 0, new Color(8, 25, 54), 0, h, new Color(19, 54, 71)))
g.fillRect(0, 0, w, h)
var i = 0
while (i < 65) {
val sx = (i * 137 + 31) % Math.max(1, w)
val sy = (i * 79 + 17) % Math.max(1, h)
g.setColor(new Color(140, 225, 255, 90))
g.fillOval(sx, sy, 2 + (i % 3), 2 + (i % 3))
i += 1
}
g.setColor(new Color(13, 42, 57))
g.fillOval(-90, h - 170, w / 2 + 100, 220)
g.setColor(new Color(16, 63, 67))
g.fillOval(w / 3, h - 155, w / 2 + 150, 210)
g.setColor(new Color(23, 90, 77))
g.fillRect(0, h - 58, w, 58)
g.setColor(new Color(55, 160, 135, 120))
g.drawLine(0, h - 58, w, h - 58)
// Floating primal-core platform
g.setColor(new Color(88, 240, 202, 50))
g.fillOval(w / 2 - 110, 28, 220, 54)
g.setColor(new Color(109, 255, 221))
g.drawOval(w / 2 - 110, 28, 220, 54)
g.setFont(new Font("SansSerif", Font.BOLD, 13))
g.drawString("PRIMAL CORE ARENA", w / 2 - 72, 20)
// Energy orbs
orbs.foreach { orb =>
if (!orb.collected) {
g.setColor(new Color(65, 255, 206, 55))
g.fillOval((orb.x - 17).toInt, (orb.y - 17).toInt, 34, 34)
g.setColor(new Color(105, 255, 222))
g.fillOval((orb.x - 7).toInt, (orb.y - 7).toInt, 14, 14)
g.setColor(Color.WHITE)
g.drawLine((orb.x - 12).toInt, orb.y.toInt, (orb.x + 12).toInt, orb.y.toInt)
g.drawLine(orb.x.toInt, (orb.y - 12).toInt, orb.x.toInt, (orb.y + 12).toInt)
}
}
// Friendly rogue bots: tag them with powers, no weapons.
bots.foreach { bot =>
if (bot.active) {
val botColor = if (bot.frozenTicks > 0) new Color(120, 220, 255) else new Color(255, 113, 145)
g.setColor(new Color(botColor.getRed, botColor.getGreen, botColor.getBlue, 55))
g.fillOval((bot.x - 24).toInt, (bot.y - 24).toInt, 48, 48)
g.setColor(botColor)
g.fillOval((bot.x - 14).toInt, (bot.y - 14).toInt, 28, 28)
g.setColor(new Color(30, 20, 45))
g.fillOval((bot.x - 7).toInt, (bot.y - 4).toInt, 5, 5)
g.fillOval((bot.x + 2).toInt, (bot.y - 4).toInt, 5, 5)
}
}
// Player aura and avatar
if (shieldTicks > 0) {
g.setColor(new Color(100, 220, 255, 65))
g.fillOval((playerX - 29).toInt, (playerY - 29).toInt, 58, 58)
g.setColor(new Color(160, 240, 255))
g.drawOval((playerX - 29).toInt, (playerY - 29).toInt, 58, 58)
}
g.setColor(new Color(130, 255, 210, 70))
g.fillOval((playerX - 23).toInt, (playerY - 23).toInt, 46, 46)
g.setColor(new Color(242, 255, 250))
g.fillOval((playerX - 10).toInt, (playerY - 15).toInt, 20, 20)
g.setColor(new Color(70, 244, 194))
g.fillRoundRect((playerX - 12).toInt, (playerY + 3).toInt, 24, 23, 9, 9)
g.setColor(new Color(255, 230, 140))
g.drawString(heroName.take(14), (playerX - 28).toInt, (playerY - 28).toInt)
if (mouseTargetActive) {
g.setColor(new Color(255, 245, 150, 170))
g.drawOval((mouseTargetX - 9).toInt, (mouseTargetY - 9).toInt, 18, 18)
}
g.setFont(new Font("SansSerif", Font.BOLD, 14))
g.setColor(new Color(225, 250, 240))
g.drawString("COLLECT EVERY ORB TO ADVANCE", 18, 25)
g.setFont(new Font("SansSerif", Font.PLAIN, 12))
g.drawString(statusText, 18, h - 17)
if (paused || lost || won) {
g.setColor(new Color(4, 10, 24, 190))
g.fillRect(0, 0, w, h)
val message = if (paused) "PAUSED" else if (lost) "POWER DEPLETED" else "PRIMAL CORE AWAKENED!"
g.setFont(new Font("SansSerif", Font.BOLD, 30))
g.setColor(new Color(225, 255, 242))
val metrics = g.getFontMetrics
g.drawString(message, (w - metrics.stringWidth(message)) / 2, h / 2 - 10)
g.setFont(new Font("SansSerif", Font.PLAIN, 16))
val sub = if (paused) "Press P or click RESUME" else "Press R to play again, or B to return to menu"
g.drawString(sub, (w - g.getFontMetrics.stringWidth(sub)) / 2, h / 2 + 26)
}
g.dispose()
}
}
}
}
}
PrimalPowerAscensionEvent6.main(Array[String]())