Skip to content

Instantly share code, notes, and snippets.

internal object CardsOnScreenResolver : OnScreenStateResolver<State> {
override fun isOnScreen(state: State): Boolean =
when (state) {
is State.Bottom,
is State.Top -> true
is State.Queued,
is State.VoteLike,
is State.VotePass -> false
}
}
sealed class State {
// Prepared but not displayed yet
data class Queued(val queueNumber: Int) : State()
// Visible below top card
object Bottom : State()
// The main card
object Top : State()
class Cards<T : Any>(
initialItems: List<T> = listOf(),
) : BaseNavModel<T, State>(
screenResolver = CardsOnScreenResolver, // <- What's on screen?
finalStates = setOf(VoteLike, VotePass), // <- What's destroyed?
savedStateMap = null
)
fun State.next(): State =
when (this) {
is Queued -> if (queueNumber == 0) Bottom else Queued(queueNumber - 1)
is Bottom -> Top
else -> this
}
@Composable
fun Game() {
Column {
Moves()
CapturedPieces(WHITE)
Board()
CapturedPieces(BLACK)
Controls()
}
}
data class SquareRenderProperties(
val position: Position,
val isHighlighted: Boolean,
val clickable: Boolean,
val onClick: () -> Unit,
val isPossibleMoveWithoutCapture: Boolean,
val isPossibleCapture: Boolean,
val boardProperties: BoardRenderProperties
)
val fromPosition = properties.fromState.board.find(piece)?.position
val currentOffset = fromPosition
?.toCoordinate(properties.isFlipped)
?.toOffset(properties.squareSize)
val targetOffset = toPosition
.toCoordinate(properties.isFlipped)
.toOffset(properties.squareSize)
val datapoint = remember(viz, properties) {
viz.dataPointAt(
properties.position,
properties.boardProperties.toState
)
}
@Composable
override fun render(properties: SquareRenderProperties) {
ActiveDatasetVisualisation.current.let { viz ->
val datapoint = viz.dataPointAt(
properties.position,
properties.boardProperties.toState
)
//...
}
object DatasetVisualiser : SquareDecoration {
@Composable
override fun render(properties: SquareRenderProperties) {
ActiveDatasetVisualisation.current.let { viz ->
val datapoint = viz.dataPointAt(
properties.position,
properties.boardProperties.toState
)