DEADSOFTWARE

Fix preferences
authorfredboy <fredboy@protonmail.com>
Tue, 1 Jul 2025 10:42:52 +0000 (17:42 +0700)
committerfredboy <fredboy@protonmail.com>
Tue, 1 Jul 2025 10:42:52 +0000 (17:42 +0700)
15 files changed:
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/ApplicationContext.kt
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/GameContext.kt
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/ApplicationContextRepositoryImpl.kt
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/GameContextRepositoryImpl.kt
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/ApplicationContextStore.kt
core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/GameContextStore.kt
core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/ApplicationContextRepository.kt
core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/GameContextRepository.kt
core/ux/rendering/src/main/java/ru/fredboy/cavedroid/ux/rendering/GameRenderer.java
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/CaveDroidApplication.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/GameScreen.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/MenuScreen.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/DynamicCameraMenuBooleanOption.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/FullscreenMenuBooleanOption.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/renderer/MenuRenderer.kt

index 02992c2e02bf8f48079e510f43532912e9f4614a..9baf05a82bd364c85e7bb58d2cfb03b2b5f7447f 100644 (file)
@@ -3,6 +3,8 @@ package ru.fredboy.cavedroid.data.configuration.model
 class ApplicationContext(
     internal val isDebug: Boolean,
     internal var isTouch: Boolean,
+    internal var isFullscreen: Boolean,
+    internal var useDynamicCamera: Boolean,
     internal var gameDirectory: String,
     internal var width: Float,
     internal var height: Float,
index d151585f375ba073fcdbb8a01e8f0a1ed6753d24..888c2c9bbd252ca25f793b9be933775fb4846cae 100644 (file)
@@ -7,8 +7,6 @@ class GameContext(
     internal val isLoadGame: Boolean,
     internal var showInfo: Boolean,
     internal var showMap: Boolean,
-    internal var isFullscreen: Boolean,
-    internal var useDynamicCamera: Boolean,
     internal var joystick: Joystick,
     internal var cameraContext: CameraContext
 )
index e5acbbc9bbaa3f99f2d9450adc4cdc4923dea345..dd89f2e7c1675d83ccfc2588091fb45d47702f68 100644 (file)
@@ -1,5 +1,7 @@
 package ru.fredboy.cavedroid.data.configuration.repository
 
+import com.badlogic.gdx.Application
+import com.badlogic.gdx.Gdx
 import ru.fredboy.cavedroid.data.configuration.store.ApplicationContextStore
 import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
 import javax.inject.Inject
@@ -14,6 +16,10 @@ class ApplicationContextRepositoryImpl @Inject constructor(
 
     override fun isTouch(): Boolean = applicationContextStore.isTouch
 
+    override fun isFullscreen(): Boolean = applicationContextStore.isFullscreen
+
+    override fun useDynamicCamera(): Boolean = applicationContextStore.useDynamicCamera
+
     override fun getGameDirectory(): String = applicationContextStore.gameDirectory
 
     override fun getWidth(): Float = applicationContextStore.width
@@ -24,6 +30,23 @@ class ApplicationContextRepositoryImpl @Inject constructor(
         applicationContextStore.isTouch = isTouch
     }
 
+    override fun setFullscreen(fullscreen: Boolean) {
+        if (Gdx.app.type != Application.ApplicationType.Desktop) {
+            return
+        }
+
+        if (fullscreen) {
+            Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode);
+        } else {
+            Gdx.graphics.setWindowedMode(2 * getWidth().toInt(), 2 * getHeight().toInt())
+        }
+        applicationContextStore.isFullscreen = fullscreen
+    }
+
+    override fun setUseDynamicCamera(use: Boolean) {
+        applicationContextStore.useDynamicCamera = use
+    }
+
     override fun setGameDirectory(path: String) {
         applicationContextStore.gameDirectory = path
     }
index 0be7a2b4b9e34f9684d3ee07cc22b0dd87d13e4b..5d59cbf6e555e88d8cbdc1d6a5675bda576d3c2a 100644 (file)
@@ -1,13 +1,11 @@
 package ru.fredboy.cavedroid.data.configuration.repository
 
-import com.badlogic.gdx.Gdx
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.model.Joystick
 import ru.fredboy.cavedroid.data.configuration.store.GameContextStore
 import ru.fredboy.cavedroid.domain.configuration.model.CameraContext
 import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository
 import javax.inject.Inject
-import javax.inject.Singleton
 
 @GameScope
 class GameContextRepositoryImpl @Inject constructor(
@@ -22,10 +20,6 @@ class GameContextRepositoryImpl @Inject constructor(
 
     override fun getJoystick(): Joystick = gameContextStore.joystick
 
-    override fun isFullscreen(): Boolean = gameContextStore.isFullscreen
-
-    override fun useDynamicCamera(): Boolean = gameContextStore.useDynamicCamera
-
     override fun getCameraContext(): CameraContext = gameContextStore.cameraContext
 
     override fun setShowInfo(show: Boolean) {
@@ -40,22 +34,6 @@ class GameContextRepositoryImpl @Inject constructor(
         gameContextStore.joystick = joystick
     }
 
-    override fun setFullscreen(fullscreen: Boolean) {
-        if (fullscreen) {
-            Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode);
-        } else {
-            Gdx.graphics.setWindowedMode(
-                /* width = */ getCameraContext().viewport.width.toInt(),
-                /* height = */ getCameraContext().viewport.height.toInt(),
-            );
-        }
-        gameContextStore.isFullscreen = fullscreen
-    }
-
-    override fun setUseDynamicCamera(use: Boolean) {
-        gameContextStore.useDynamicCamera = use
-    }
-
     override fun setCameraContext(cameraContext: CameraContext) {
         gameContextStore.cameraContext = cameraContext
     }
index eaf4bee437a827db0773794273798b119b430a3f..7c56fde3d9567fd85ef86e3a2dcf9615e22a8ded 100644 (file)
@@ -1,5 +1,6 @@
 package ru.fredboy.cavedroid.data.configuration.store
 
+import ru.fredboy.cavedroid.common.api.PreferencesStore
 import ru.fredboy.cavedroid.data.configuration.model.ApplicationContext
 import javax.inject.Inject
 import javax.inject.Singleton
@@ -7,6 +8,7 @@ import javax.inject.Singleton
 @Singleton
 class ApplicationContextStore @Inject constructor(
     private val applicationContext: ApplicationContext,
+    private val preferencesStore: PreferencesStore,
 ) {
 
     private val lock = Any()
@@ -18,6 +20,20 @@ class ApplicationContextStore @Inject constructor(
         get() = synchronized(lock) { applicationContext.isTouch }
         set(value) = synchronized(lock) { applicationContext.isTouch = value }
 
+    var isFullscreen: Boolean
+        get() = synchronized(lock) { applicationContext.isFullscreen }
+        set(value) = synchronized(lock) {
+            applicationContext.isFullscreen = value
+            preferencesStore.setPreference(KEY_FULLSCREEN_PREF, value.toString())
+        }
+
+    var useDynamicCamera: Boolean
+        get() = synchronized(lock) { applicationContext.useDynamicCamera }
+        set(value) = synchronized(lock) {
+            applicationContext.useDynamicCamera = value
+            preferencesStore.setPreference(KEY_DYNAMIC_CAMERA_PREF, value.toString())
+        }
+
     var gameDirectory: String
         get() = synchronized(lock) { applicationContext.gameDirectory }
         set(value) = synchronized(lock) { applicationContext.gameDirectory = value }
@@ -30,4 +46,9 @@ class ApplicationContextStore @Inject constructor(
         get() = synchronized(lock) { applicationContext.height }
         set(value) = synchronized(lock) { applicationContext.height = value }
 
+
+    private companion object {
+        private const val KEY_FULLSCREEN_PREF = "fullscreen"
+        private const val KEY_DYNAMIC_CAMERA_PREF = "dyncam"
+    }
 }
\ No newline at end of file
index 268a887eb8c37f203a4bfd065bc3e434ca92e927..adaedde60da40ee5cdf242505121ac9507521a70 100644 (file)
@@ -28,14 +28,6 @@ class GameContextStore @Inject constructor(
         get() = synchronized(lock) { gameContext.joystick }
         set(value) = synchronized(lock) { gameContext.joystick = value }
 
-    var isFullscreen: Boolean
-        get() = synchronized(lock) { gameContext.isFullscreen }
-        set(value) = synchronized(lock) { gameContext.isFullscreen = value }
-
-    var useDynamicCamera: Boolean
-        get() = synchronized(lock) { gameContext.useDynamicCamera }
-        set(value) = synchronized(lock) { gameContext.useDynamicCamera = value }
-
     var cameraContext: CameraContext
         get() = synchronized(lock) { gameContext.cameraContext }
         set(value) = synchronized(lock) { gameContext.cameraContext = value }
index 9bc739a8db2f869a360028922085c16669e50dd1..115f9a8f606bf34d621950120d4f94b6f47ed1ee 100644 (file)
@@ -6,6 +6,11 @@ interface ApplicationContextRepository {
 
     fun isTouch(): Boolean
 
+    fun isFullscreen(): Boolean
+
+    fun useDynamicCamera(): Boolean
+
+
     fun getGameDirectory(): String
 
     fun getWidth(): Float
@@ -14,6 +19,10 @@ interface ApplicationContextRepository {
 
     fun setTouch(isTouch: Boolean)
 
+    fun setFullscreen(fullscreen: Boolean)
+
+    fun setUseDynamicCamera(use: Boolean)
+
     fun setGameDirectory(path: String)
 
     fun setWidth(width: Float)
index 2f0692d033ba27b9bbd8411179fd6ef3fed4debd..5022ac1bb73e97a108d61bbeacb371cb2d245a72 100644 (file)
@@ -13,10 +13,6 @@ interface GameContextRepository {
 
     fun getJoystick(): Joystick
 
-    fun isFullscreen(): Boolean
-
-    fun useDynamicCamera(): Boolean
-
     fun getCameraContext(): CameraContext
 
     fun setShowInfo(show: Boolean)
@@ -25,10 +21,6 @@ interface GameContextRepository {
 
     fun setJoystick(joystick: Joystick)
 
-    fun setFullscreen(fullscreen: Boolean)
-
-    fun setUseDynamicCamera(use: Boolean)
-
     fun setCameraContext(cameraContext: CameraContext)
 
 }
index 94bb385d110f638f46a9f9df9cb04f7327292805..190dda9c54df6411645216f4d469fac146847019 100644 (file)
@@ -211,7 +211,7 @@ public class GameRenderer {
     }
 
     private void updateCameraPosition(float delta) {
-        if (mGameContextRepository.useDynamicCamera()) {
+        if (mApplicationContextRepository.useDynamicCamera()) {
             updateDynamicCameraPosition(delta);
         } else {
             updateStaticCameraPosition();
index 0bbaa300868e2fd09344b4ef1000818c8e1978b4..01f2b5bd8dce834ad6355ff7a0df67a439196054 100644 (file)
@@ -25,10 +25,25 @@ class CaveDroidApplication(
         setScreen(applicationComponent.gameScreen.apply { newGame(gameMode) })
     }
 
+    private fun initFullscreenMode(isFullscreen: Boolean) {
+        if (Gdx.app.type != Application.ApplicationType.Desktop) {
+            return
+        }
+
+        if (isFullscreen) {
+            Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode);
+        } else {
+            Gdx.graphics.setWindowedMode(960, 540)
+        }
+    }
+
     override fun create() {
         val width = DEFAULT_VIEWPORT_WIDTH
         val height = width / Gdx.graphics.ratio
 
+        val isFullscreen = preferencesStore.getPreference("fullscreen").toBoolean()
+        initFullscreenMode(isFullscreen)
+
         applicationComponent = DaggerApplicationComponent.builder()
             .applicationContext(
                 ApplicationContext(
@@ -37,6 +52,8 @@ class CaveDroidApplication(
                     gameDirectory = gameDataDirectoryPath,
                     width = width,
                     height = height,
+                    isFullscreen = isFullscreen,
+                    useDynamicCamera = preferencesStore.getPreference("dyncam").toBoolean()
                 )
             )
             .applicationController(this)
index 4c02cebac1f6c6a3cd7841fda46c54338f81ba10..f7e229918dc483f0c45399c92f87efb468274af0 100644 (file)
@@ -27,8 +27,6 @@ class GameScreen @Inject constructor(
             isLoadGame = isLoadGame,
             showInfo = false,
             showMap = false,
-            isFullscreen = false,
-            useDynamicCamera = false,
             joystick = Joystick(Player.SPEED),
             cameraContext = CameraContext(
                 viewport = Rectangle(
index 6bc03e5f7683b41fe00569b7d4d1f7e252e63748..52133485ccd4fad3c834e7e9739a73d1bd656ead 100644 (file)
@@ -35,6 +35,7 @@ class MenuScreen @Inject constructor() : Screen {
     }
 
     override fun show() {
+        resetMenu()
         Gdx.input.inputProcessor = menuInputProcessor
     }
 
index 6de8ace5abe99f66fad60f9226a6188aba1e527c..a2d588570a040024c148c41658d76c83cc8a7b49 100644 (file)
@@ -1,22 +1,22 @@
 package ru.fredboy.cavedroid.zygote.menu.option.bool
 
 import ru.fredboy.cavedroid.common.di.MenuScope
+import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
 import ru.fredboy.cavedroid.zygote.menu.option.annotation.BindsMenuBooleanOption
 import javax.inject.Inject
 
 @MenuScope
 @BindsMenuBooleanOption(DynamicCameraMenuBooleanOption.KEY)
 class DynamicCameraMenuBooleanOption @Inject constructor(
-//    private val gameContextRepository: GameContextRepository,
+    private val applicationContextRepository: ApplicationContextRepository,
 ) : IMenuBooleanOption {
 
     override fun getOption(): Boolean {
-        return false
-//        return gameContextRepository.useDynamicCamera()
+        return applicationContextRepository.useDynamicCamera()
     }
 
     override fun toggleOption() {
-//        gameContextRepository.setUseDynamicCamera(!getOption())
+        applicationContextRepository.setUseDynamicCamera(!getOption())
     }
 
     companion object {
index 1e73e1df8f13eeaf6c28211843625b48d32884ea..9865da66614ae7070836d35fa681ad6650a4a667 100644 (file)
@@ -1,22 +1,22 @@
 package ru.fredboy.cavedroid.zygote.menu.option.bool
 
 import ru.fredboy.cavedroid.common.di.MenuScope
+import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
 import ru.fredboy.cavedroid.zygote.menu.option.annotation.BindsMenuBooleanOption
 import javax.inject.Inject
 
 @MenuScope
 @BindsMenuBooleanOption(FullscreenMenuBooleanOption.KEY)
 class FullscreenMenuBooleanOption @Inject constructor(
-//    private val gameContextRepository: GameContextRepository,
+    private val applicationContextRepository: ApplicationContextRepository,
 ) : IMenuBooleanOption {
 
     override fun getOption(): Boolean {
-        return false
-//        return gameContextRepository.isFullscreen()
+        return applicationContextRepository.isFullscreen()
     }
 
     override fun toggleOption() {
-//        gameContextRepository.setFullscreen(!getOption())
+        applicationContextRepository.setFullscreen(!getOption())
     }
 
     companion object {
index 6c7fdd0a411f18c7396ca59d4536986a30636495..959f786082da584a09fd878677d85689435ae357 100644 (file)
@@ -45,9 +45,7 @@ class MenuRenderer @Inject constructor(
     }
 
     private fun getButtonTextureRegionKey(button: MenuButton): String {
-        val buttonAction = menuButtonActions[button.actionKey]
-
-        if (buttonAction?.canPerform() != true) {
+        if (button is MenuButton.Simple && menuButtonActions[button.actionKey]?.canPerform() != true) {
             return KEY_BUTTON_DISABLED_TEXTURE
         }