Skip to content

Commit

Permalink
adds new board to game over screen
Browse files Browse the repository at this point in the history
  • Loading branch information
LandonPatmore committed Aug 30, 2022
1 parent ff53530 commit 5988e9d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ class DungeonAppWorkflow(

is PlayingGame -> {
val sessionProps = GameSessionWorkflow.Props(renderState.boardPath, renderProps.paused)
val gameScreen = context.renderChild(gameSessionWorkflow, sessionProps)
val gameScreen = context.renderChild(gameSessionWorkflow, sessionProps) {
action { state = LoadingBoardList }
}
gameScreen
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
package com.squareup.sample.dungeon

import android.os.Vibrator
import com.squareup.sample.dungeon.GameSessionWorkflow.Output
import com.squareup.sample.dungeon.GameSessionWorkflow.Output.NewBoard
import com.squareup.sample.dungeon.GameSessionWorkflow.Props
import com.squareup.sample.dungeon.GameSessionWorkflow.State
import com.squareup.sample.dungeon.GameSessionWorkflow.State.GameOver
Expand All @@ -21,7 +23,10 @@ import com.squareup.workflow1.ui.Screen
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.modal.AlertContainerScreen
import com.squareup.workflow1.ui.modal.AlertScreen
import com.squareup.workflow1.ui.modal.AlertScreen.Button.NEGATIVE
import com.squareup.workflow1.ui.modal.AlertScreen.Button.NEUTRAL
import com.squareup.workflow1.ui.modal.AlertScreen.Button.POSITIVE
import com.squareup.workflow1.ui.modal.AlertScreen.Event.ButtonClicked

typealias BoardPath = String

Expand All @@ -33,7 +38,7 @@ class GameSessionWorkflow(
private val gameWorkflow: GameWorkflow,
private val vibrator: Vibrator,
private val boardLoader: BoardLoader
) : StatefulWorkflow<Props, State, Nothing, AlertContainerScreen<Any>>() {
) : StatefulWorkflow<Props, State, Output, AlertContainerScreen<Any>>() {

data class Props(
val boardPath: BoardPath,
Expand All @@ -46,6 +51,10 @@ class GameSessionWorkflow(
data class GameOver(val board: Board) : State()
}

sealed class Output {
object NewBoard : Output()
}

override fun initialState(
props: Props,
snapshot: Snapshot?
Expand Down Expand Up @@ -75,10 +84,20 @@ class GameSessionWorkflow(
val gameScreen = context.renderChild(gameWorkflow, gameInput) { noAction() }

val gameOverDialog = AlertScreen(
buttons = mapOf(POSITIVE to "Restart"),
buttons = mapOf(POSITIVE to "Restart", NEUTRAL to "New board"),
message = "You've been eaten, try again.",
cancelable = false,
onEvent = { context.actionSink.send(restartGame()) }
onEvent = {
if (it is ButtonClicked) {
context.actionSink.send(
when (it.button) {
POSITIVE -> restartGame()
NEUTRAL -> newBoard()
NEGATIVE -> noAction()
}
)
}
}
)

AlertContainerScreen(gameScreen, gameOverDialog)
Expand Down Expand Up @@ -112,6 +131,8 @@ class GameSessionWorkflow(

private fun restartGame() = action("restartGame") { state = Loading }

private fun newBoard() = action("newBoard") { setOutput(NewBoard)}

private fun vibrate(durationMs: Long) {
@Suppress("DEPRECATION")
vibrator.vibrate(durationMs)
Expand Down

0 comments on commit 5988e9d

Please sign in to comment.