Pause menu reachable after very much pain
This commit is contained in:
parent
2a13aaff90
commit
889825b371
3 changed files with 18 additions and 8 deletions
|
@ -8,10 +8,9 @@ import org.hexworks.amethyst.api.entity.Entity
|
|||
import org.hexworks.amethyst.api.entity.EntityType
|
||||
import org.hexworks.zircon.api.uievent.KeyCode
|
||||
import org.hexworks.zircon.api.uievent.KeyboardEvent
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
// 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 {
|
||||
// We destructure our context object so its properties are easy to access.
|
||||
|
@ -20,6 +19,7 @@ object InputReceiver : BaseBehavior<GameContext>() {
|
|||
val currentPos = player.position
|
||||
// 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.
|
||||
|
||||
if (uiEvent is KeyboardEvent) {
|
||||
// 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,
|
||||
|
@ -30,8 +30,6 @@ object InputReceiver : BaseBehavior<GameContext>() {
|
|||
KeyCode.KEY_A -> currentPos.withRelativeX(-1)
|
||||
KeyCode.KEY_S -> currentPos.withRelativeY(1)
|
||||
KeyCode.KEY_D -> currentPos.withRelativeX(1)
|
||||
|
||||
KeyCode.ESCAPE -> exitProcess(0)
|
||||
else -> {
|
||||
// If some key is pressed other than WASD, then we just return the current position, so no movement will happen
|
||||
currentPos
|
||||
|
|
|
@ -8,7 +8,7 @@ import org.hexworks.zircon.api.component.ComponentAlignment
|
|||
import org.hexworks.zircon.api.grid.TileGrid
|
||||
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 {
|
||||
val msg = "Pre-Game Configuration"
|
||||
|
||||
|
|
|
@ -13,8 +13,7 @@ import org.hexworks.zircon.api.component.ColorTheme
|
|||
import org.hexworks.zircon.api.component.ComponentAlignment
|
||||
import org.hexworks.zircon.api.game.ProjectionMode
|
||||
import org.hexworks.zircon.api.grid.TileGrid
|
||||
import org.hexworks.zircon.api.uievent.KeyboardEventType
|
||||
import org.hexworks.zircon.api.uievent.Processed
|
||||
import org.hexworks.zircon.api.uievent.*
|
||||
import org.hexworks.zircon.api.view.base.BaseView
|
||||
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)
|
||||
|
||||
// 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)
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue