Package-level declarations

Overview

Main menu screen where users can start a new game, load saved games, access settings, or exit the application.

Components

  • MainMenu — Main menu page composable

  • MainMenuBg — Background rendering for the menu

  • MainMenuViewModel — State management for menu interactions

Responsibilities

  • Displaying main menu options

  • Handling user navigation to other pages

  • Managing menu state and animations

Types

Link copied to clipboard
data class MainMenuUIState(val screenState: ScreenState = ScreenState()) : UiState

UI state for the main menu screen.

Link copied to clipboard
class MainMenuViewModel(val appState: AppStateImpl, val globalError: ReversiException? = null, val setGlobalError: (Exception?, ErrorType?) -> Unit, val setPage: (Page) -> Unit) : ViewModel<MainMenuUIState>

ViewModel for the main menu screen. Manages menu interactions, audio playback, and navigation state.

Link copied to clipboard
data class MovingPiece(val id: Long, val xPercent: Float, val yPercent: Float, val radiusDp: Float, val speed: Float, val phase: Float, val waveAmplitude: Float, val isWhite: Boolean, val spawnTime: Long, val isSpecial: Boolean = false)

Represents an individual animated piece in the background.

Properties

Link copied to clipboard
private const val BASE_ALPHA: Float = 0.3f
Link copied to clipboard
private const val FADE_EDGE_WIDTH: Float = 0.7f
Link copied to clipboard
Link copied to clipboard
private const val MAX_PIECES: Int = 50
Link copied to clipboard
private const val SPAWN_DELAY_MS: Long = 250
Link copied to clipboard
private const val SPECIAL_PIECE_CHANCE: Float = 0.1f
Link copied to clipboard
private const val SPECIAL_PIECES_MAX: Float = 2.0f
Link copied to clipboard
private const val WAVE_DURATION_MS: Int = 3000

Functions

Link copied to clipboard
Link copied to clipboard
private fun calculateEdgeFade(xPercent: Float): Float
Link copied to clipboard
private fun calculateWaveOffset(waveOffset: Float, phase: Float, amplitude: Float): Float
Link copied to clipboard
private fun createNewPiece(canAddSpecial: Boolean): MovingPiece
Link copied to clipboard
fun DrawScope.drawCrown(x: Float, y: Float, radiusPx: Float, alpha: Float)
Link copied to clipboard
fun DrawScope.drawEyes(isWhite: Boolean, theme: AppTheme, x: Float, y: Float, radiusPx: Float, alpha: Float)
Link copied to clipboard
fun DrawScope.drawPiece(piece: MovingPiece, theme: AppTheme, x: Float, y: Float, radiusPx: Float, edgeFade: Float, baseAlpha: Float = BASE_ALPHA)
Link copied to clipboard
fun DrawScope.drawSpecialFeatures(isWhite: Boolean, theme: AppTheme, x: Float, y: Float, radiusPx: Float, edgeFade: Float, baseAlpha: Float = BASE_ALPHA)
Link copied to clipboard
@Composable
fun ReversiScope.MainMenu(viewModel: MainMenuViewModel, modifier: Modifier = Modifier, onLeave: () -> Unit, isTestMode: Boolean = false)

Main menu screen showing navigation options. Handles menu audio playback and navigation callbacks to other pages.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard