mirror of
https://github.com/cmclark00/mintris.git
synced 2025-05-17 19:35:21 +01:00
Refactor: Move selectedLevel and randomModeEnabled to ViewModel
This commit is contained in:
parent
301bf1e64f
commit
2e2cd92192
2 changed files with 75 additions and 24 deletions
|
@ -86,12 +86,10 @@ class MainActivity : AppCompatActivity(),
|
|||
// Game state
|
||||
private var piecesPlaced = 0
|
||||
private var gameStartTime = 0L
|
||||
private var selectedLevel = 1
|
||||
private val maxLevel = 20
|
||||
private var lastLines = 0 // Track the previous lines count
|
||||
private var lastLinesGroup = 0 // Track which 10-line group we're in (0-9, 10-19, etc.)
|
||||
private var lastRandomLevel = 0 // Track the level at which we last did a random change
|
||||
private var isRandomModeEnabled = false
|
||||
private var currentTheme = PlayerProgressionManager.THEME_CLASSIC
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
|
||||
|
@ -241,9 +239,11 @@ class MainActivity : AppCompatActivity(),
|
|||
gameMusic.setEnabled(enabled)
|
||||
})
|
||||
|
||||
// Load random mode setting
|
||||
isRandomModeEnabled = getSharedPreferences("com.com.pixelmintgames.pixelmintdrop.preferences", Context.MODE_PRIVATE)
|
||||
.getBoolean("random_mode_enabled", false)
|
||||
// Observe Random Mode state
|
||||
viewModel.isRandomModeEnabled.observe(this, Observer { enabled ->
|
||||
// Update the switch UI
|
||||
binding.randomModeSwitch?.isChecked = enabled
|
||||
})
|
||||
|
||||
// Initialize gamepad controller
|
||||
gamepadController = GamepadController(gameView)
|
||||
|
@ -397,7 +397,7 @@ class MainActivity : AppCompatActivity(),
|
|||
val newHighScore = highScoreManager.isHighScore(finalScore)
|
||||
statsManager.endSession() // End session after calculations
|
||||
|
||||
Log.d(TAG, "Game Over. Score: $finalScore, Level: ${viewModel.currentLevel.value}, Lines: ${gameBoard.lines}, Start Level: $selectedLevel, New High Score: $newHighScore, XP Gained: $xpGained")
|
||||
Log.d(TAG, "Game Over. Score: $finalScore, Level: ${viewModel.currentLevel.value}, Lines: ${gameBoard.lines}, Start Level: ${viewModel.selectedLevel.value}, New High Score: $newHighScore, XP Gained: $xpGained")
|
||||
|
||||
// Show appropriate screen: Progression or Game Over directly
|
||||
if (xpGained > 0 || newHighScore) {
|
||||
|
@ -480,16 +480,18 @@ class MainActivity : AppCompatActivity(),
|
|||
|
||||
binding.pauseLevelUpButton.setOnClickListener {
|
||||
gameHaptics.performHapticFeedback(it, HapticFeedbackConstants.VIRTUAL_KEY)
|
||||
if (selectedLevel < maxLevel) {
|
||||
selectedLevel++
|
||||
val currentSelected = viewModel.selectedLevel.value ?: 1
|
||||
if (currentSelected < maxLevel) {
|
||||
viewModel.setSelectedLevel(currentSelected + 1)
|
||||
updateLevelSelector()
|
||||
}
|
||||
}
|
||||
|
||||
binding.pauseLevelDownButton.setOnClickListener {
|
||||
gameHaptics.performHapticFeedback(it, HapticFeedbackConstants.VIRTUAL_KEY)
|
||||
if (selectedLevel > 1) {
|
||||
selectedLevel--
|
||||
val currentSelected = viewModel.selectedLevel.value ?: 1
|
||||
if (currentSelected > 1) {
|
||||
viewModel.setSelectedLevel(currentSelected - 1)
|
||||
updateLevelSelector()
|
||||
}
|
||||
}
|
||||
|
@ -531,6 +533,16 @@ class MainActivity : AppCompatActivity(),
|
|||
|
||||
// Initialize pause menu items for gamepad navigation
|
||||
initPauseMenuNavigation()
|
||||
|
||||
// Set up random mode switch
|
||||
binding.randomModeSwitch?.apply {
|
||||
isChecked = viewModel.isRandomModeEnabled.value ?: false
|
||||
isEnabled = progressionManager.getPlayerLevel() >= 5
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
// Only need to call toggle, ViewModel handles saving
|
||||
viewModel.toggleRandomMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -653,14 +665,11 @@ class MainActivity : AppCompatActivity(),
|
|||
|
||||
// Set up random mode switch
|
||||
binding.randomModeSwitch?.apply {
|
||||
isChecked = isRandomModeEnabled
|
||||
isChecked = viewModel.isRandomModeEnabled.value ?: false
|
||||
isEnabled = progressionManager.getPlayerLevel() >= 5
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
isRandomModeEnabled = isChecked
|
||||
getSharedPreferences("com.com.pixelmintgames.pixelmintdrop.preferences", Context.MODE_PRIVATE)
|
||||
.edit()
|
||||
.putBoolean("random_mode_enabled", isChecked)
|
||||
.apply()
|
||||
// Only need to call toggle, ViewModel handles saving
|
||||
viewModel.toggleRandomMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -835,8 +844,8 @@ class MainActivity : AppCompatActivity(),
|
|||
* Update the level selector display
|
||||
*/
|
||||
private fun updateLevelSelector() {
|
||||
binding.pauseLevelText.text = selectedLevel.toString()
|
||||
gameBoard.updateLevel(selectedLevel)
|
||||
binding.pauseLevelText.text = viewModel.selectedLevel.value.toString()
|
||||
gameBoard.updateLevel(viewModel.selectedLevel.value ?: 1)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -879,10 +888,10 @@ class MainActivity : AppCompatActivity(),
|
|||
* Start a new game
|
||||
*/
|
||||
private fun startGame() {
|
||||
Log.d(TAG, "Starting game at level $selectedLevel")
|
||||
Log.d(TAG, "Starting game at level ${viewModel.selectedLevel.value}")
|
||||
// Reset game state
|
||||
viewModel.resetGame() // Resets score and level in ViewModel
|
||||
viewModel.setLevel(selectedLevel) // Set initial level from selection
|
||||
viewModel.setLevel(viewModel.selectedLevel.value ?: 1) // Set initial level from selection
|
||||
piecesPlaced = 0
|
||||
gameStartTime = System.currentTimeMillis()
|
||||
lastLines = 0
|
||||
|
@ -953,7 +962,7 @@ class MainActivity : AppCompatActivity(),
|
|||
val newHighScore = highScoreManager.isHighScore(finalScore)
|
||||
statsManager.endSession() // End session after calculations
|
||||
|
||||
Log.d(TAG, "Game Over. Score: $finalScore, Level: ${viewModel.currentLevel.value}, Lines: ${gameBoard.lines}, Start Level: $selectedLevel, New High Score: $newHighScore, XP Gained: $xpGained")
|
||||
Log.d(TAG, "Game Over. Score: $finalScore, Level: ${viewModel.currentLevel.value}, Lines: ${gameBoard.lines}, Start Level: ${viewModel.selectedLevel.value}, New High Score: $newHighScore, XP Gained: $xpGained")
|
||||
|
||||
// Show appropriate screen: Progression or Game Over directly
|
||||
if (xpGained > 0 || newHighScore) {
|
||||
|
@ -997,7 +1006,7 @@ class MainActivity : AppCompatActivity(),
|
|||
// Reset session stats
|
||||
statsManager.startNewSession()
|
||||
progressionManager.startNewSession()
|
||||
gameBoard.updateLevel(selectedLevel)
|
||||
gameBoard.updateLevel(viewModel.selectedLevel.value ?: 1)
|
||||
}
|
||||
|
||||
private fun restartGame() {
|
||||
|
@ -2007,7 +2016,7 @@ class MainActivity : AppCompatActivity(),
|
|||
binding.comboText.text = gameBoard.getCombo().toString()
|
||||
|
||||
// If random mode is enabled, check if we should change theme or block skin
|
||||
if (isRandomModeEnabled) {
|
||||
if (viewModel.isRandomModeEnabled.value == true) {
|
||||
// Get the current 10-line group (0 for 0-9, 1 for 10-19, etc.)
|
||||
val currentLinesGroup = lines / 10
|
||||
|
||||
|
|
|
@ -3,8 +3,11 @@ package com.pixelmintdrop
|
|||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import android.content.Context
|
||||
|
||||
class MainActivityViewModel : ViewModel() {
|
||||
class MainActivityViewModel(application: Application) : AndroidViewModel(application) {
|
||||
|
||||
// Private MutableLiveData for internal updates
|
||||
private val _currentScore = MutableLiveData<Long>(0L)
|
||||
|
@ -22,6 +25,18 @@ class MainActivityViewModel : ViewModel() {
|
|||
val isMusicEnabled: LiveData<Boolean> = _isMusicEnabled
|
||||
// ---------------------------
|
||||
|
||||
// --- Game Settings State ---
|
||||
private val _selectedLevel = MutableLiveData<Int>(1) // Default start level
|
||||
val selectedLevel: LiveData<Int> = _selectedLevel
|
||||
|
||||
private val _isRandomModeEnabled = MutableLiveData<Boolean>(false)
|
||||
val isRandomModeEnabled: LiveData<Boolean> = _isRandomModeEnabled
|
||||
// ---------------------------
|
||||
|
||||
init { // Load initial random mode setting
|
||||
loadSettings()
|
||||
}
|
||||
|
||||
// Example function to update the score (logic would be moved here)
|
||||
fun incrementScore(points: Long) {
|
||||
_currentScore.value = (_currentScore.value ?: 0L) + points
|
||||
|
@ -58,5 +73,32 @@ class MainActivityViewModel : ViewModel() {
|
|||
}
|
||||
// --------------------------
|
||||
|
||||
// --- Game Settings Logic ---
|
||||
fun setSelectedLevel(level: Int) {
|
||||
_selectedLevel.value = level
|
||||
}
|
||||
|
||||
fun toggleRandomMode() {
|
||||
val newValue = !(_isRandomModeEnabled.value ?: false)
|
||||
_isRandomModeEnabled.value = newValue
|
||||
saveRandomModeSetting(newValue)
|
||||
}
|
||||
|
||||
private fun loadSettings() {
|
||||
val prefs = getApplication<Application>().getSharedPreferences(
|
||||
"com.com.pixelmintgames.pixelmintdrop.preferences", Context.MODE_PRIVATE
|
||||
)
|
||||
_isRandomModeEnabled.value = prefs.getBoolean("random_mode_enabled", false)
|
||||
// Load other settings if needed
|
||||
}
|
||||
|
||||
private fun saveRandomModeSetting(enabled: Boolean) {
|
||||
val prefs = getApplication<Application>().getSharedPreferences(
|
||||
"com.com.pixelmintgames.pixelmintdrop.preferences", Context.MODE_PRIVATE
|
||||
)
|
||||
prefs.edit().putBoolean("random_mode_enabled", enabled).apply()
|
||||
}
|
||||
// ---------------------------
|
||||
|
||||
// Add other state variables and logic related to game state here
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue