Pause menu reachable after very much pain

This commit is contained in:
nelle 2023-10-29 23:28:09 -06:00
parent 2a13aaff90
commit 889825b371
3 changed files with 18 additions and 8 deletions

View file

@ -8,10 +8,9 @@ import org.hexworks.amethyst.api.entity.Entity
import org.hexworks.amethyst.api.entity.EntityType import org.hexworks.amethyst.api.entity.EntityType
import org.hexworks.zircon.api.uievent.KeyCode import org.hexworks.zircon.api.uievent.KeyCode
import org.hexworks.zircon.api.uievent.KeyboardEvent import org.hexworks.zircon.api.uievent.KeyboardEvent
import kotlin.system.exitProcess
// InputReceiver is pretty simple, it just checks for WASD, and acts accordingly // InputReceiver is pretty simple, it just checks for WASD, and acts accordingly
object InputReceiver : BaseBehavior<GameContext>() { object InputReceiver : BaseBehavior<GameContext>() {
override suspend fun update(entity: Entity<EntityType, GameContext>, context: GameContext): Boolean { override suspend fun update(entity: Entity<EntityType, GameContext>, context: GameContext): Boolean {
// We destructure our context object so its properties are easy to access. // We destructure our context object so its properties are easy to access.
@ -20,6 +19,7 @@ object InputReceiver : BaseBehavior<GameContext>() {
val currentPos = player.position val currentPos = player.position
// We only want KeyboardEvents for now so we check with the is operator. // We only want KeyboardEvents for now so we check with the is operator.
// This is similar as the instanceof operator in Java but a bit more useful. // This is similar as the instanceof operator in Java but a bit more useful.
if (uiEvent is KeyboardEvent) { if (uiEvent is KeyboardEvent) {
// We use when which is similar to switch in Java to check which key was pressed. // We use when which is similar to switch in Java to check which key was pressed.
// Zircon has a KeyCode for all keys which can be pressed. when in Kotlin is also an expression, // Zircon has a KeyCode for all keys which can be pressed. when in Kotlin is also an expression,
@ -30,8 +30,6 @@ object InputReceiver : BaseBehavior<GameContext>() {
KeyCode.KEY_A -> currentPos.withRelativeX(-1) KeyCode.KEY_A -> currentPos.withRelativeX(-1)
KeyCode.KEY_S -> currentPos.withRelativeY(1) KeyCode.KEY_S -> currentPos.withRelativeY(1)
KeyCode.KEY_D -> currentPos.withRelativeX(1) KeyCode.KEY_D -> currentPos.withRelativeX(1)
KeyCode.ESCAPE -> exitProcess(0)
else -> { else -> {
// If some key is pressed other than WASD, then we just return the current position, so no movement will happen // If some key is pressed other than WASD, then we just return the current position, so no movement will happen
currentPos currentPos

View file

@ -8,7 +8,7 @@ import org.hexworks.zircon.api.component.ComponentAlignment
import org.hexworks.zircon.api.grid.TileGrid import org.hexworks.zircon.api.grid.TileGrid
import org.hexworks.zircon.api.view.base.BaseView import org.hexworks.zircon.api.view.base.BaseView
class PauseView (private val grid: TileGrid, theme: ColorTheme = GameConfig.THEME) : BaseView(grid, theme) { class PauseView(public val grid: TileGrid, theme: ColorTheme = GameConfig.THEME) : BaseView(grid, theme) {
init { init {
val msg = "Pre-Game Configuration" val msg = "Pre-Game Configuration"

View file

@ -13,8 +13,7 @@ import org.hexworks.zircon.api.component.ColorTheme
import org.hexworks.zircon.api.component.ComponentAlignment import org.hexworks.zircon.api.component.ComponentAlignment
import org.hexworks.zircon.api.game.ProjectionMode import org.hexworks.zircon.api.game.ProjectionMode
import org.hexworks.zircon.api.grid.TileGrid import org.hexworks.zircon.api.grid.TileGrid
import org.hexworks.zircon.api.uievent.KeyboardEventType import org.hexworks.zircon.api.uievent.*
import org.hexworks.zircon.api.uievent.Processed
import org.hexworks.zircon.api.view.base.BaseView import org.hexworks.zircon.api.view.base.BaseView
import org.hexworks.zircon.internal.game.impl.GameAreaComponentRenderer import org.hexworks.zircon.internal.game.impl.GameAreaComponentRenderer
@ -50,10 +49,23 @@ class PlayView (private val grid: TileGrid, private val game: Game = GameBuilder
screen.addComponents(sidebar, logArea, gameComponent) screen.addComponents(sidebar, logArea, gameComponent)
// modify our PlayView to update our world whenever the user presses a key // modify our PlayView to update our world whenever the user presses a key
screen.handleKeyboardEvents(KeyboardEventType.KEY_PRESSED) {event, _ -> screen.handleKeyboardEvents(KeyboardEventType.KEY_PRESSED) { event, _ ->
game.world.update(screen, event, game) game.world.update(screen, event, game)
Processed Processed
} }
grid.handleKeyboardEvents(KeyboardEventType.KEY_PRESSED) label@{ event: KeyboardEvent, phase: UIEventPhase? ->
// we filter for KeyCode.ESCAPE only
if (event.code == KeyCode.ESCAPE) {
// only prints it when we press Arrow Up
replaceWith(PauseView(grid))
return@label UIEventResponse.processed()
} else {
// otherwise we just pass on it
return@label UIEventResponse.pass() // we didn't handle it so we pass on the event
}
}
} }
} }