From ddc0d6ddfbfcc206722a7f9aef8cd06c4a406f6f Mon Sep 17 00:00:00 2001 From: fredboy Date: Tue, 1 Jul 2025 00:23:38 +0700 Subject: [PATCH] Refactor game initialization --- android/build.gradle.kts | 3 +- .../deadsoftware/cavedroid/AndroidLauncher.kt | 3 +- core/build.gradle.kts | 34 ----- ...Controller.kt => ApplicationController.kt} | 2 +- .../di/ApplicationContextModule.kt | 13 ++ ...gurationModule.kt => GameContextModule.kt} | 5 +- .../configuration/model/ApplicationContext.kt | 9 ++ .../data/configuration/model/GameContext.kt | 31 ++--- .../ApplicationContextRepositoryImpl.kt | 38 ++++++ .../repository/GameContextRepositoryImpl.kt | 40 ++---- .../store/ApplicationContextStore.kt | 33 +++++ .../configuration/store/GameContextStore.kt | 32 ++--- .../ApplicationContextRepository.kt | 23 ++++ .../repository/GameContextRepository.kt | 24 +--- .../cavedroid/entity/mob/model/Player.kt | 2 +- .../ru/deadsoftware/cavedroid/MainConfig.java | 26 ---- .../cavedroid/game/GameComponent.java | 38 ------ .../cavedroid/game/GameModule.java | 89 ------------- .../cavedroid/game/GameScreen.java | 89 ------------- .../cavedroid/menu/MenuComponent.java | 25 ---- .../cavedroid/menu/MenuScreen.java | 70 ---------- .../ru/deadsoftware/cavedroid/BaseGame.kt | 6 - .../ru/deadsoftware/cavedroid/CaveGame.kt | 104 --------------- .../ru/deadsoftware/cavedroid/GameModule.kt | 13 -- .../deadsoftware/cavedroid/MainComponent.kt | 59 --------- .../ux/controls/GameInputProcessor.kt | 20 +-- .../keyboard/FlyDownKeyboardInputHandler.kt | 5 +- .../keyboard/FlyUpKeyboardInputHandler.kt | 5 +- .../keyboard/GoLeftKeyboardInputHandler.kt | 5 +- .../keyboard/GoRightKeyboardInputHandler.kt | 5 +- .../keyboard/JumpKeyboardInputHandler.kt | 5 +- ...eCursorControlsModeKeyboardInputHandler.kt | 5 +- .../keyboard/PauseGameKeyboardInputHandler.kt | 9 +- .../keyboard/StopSwimKeyboardInputHandler.kt | 5 +- .../keyboard/SwimUpKeyboardInputHandler.kt | 5 +- .../ToggleControlsModeKeyboardInputHandler.kt | 5 +- .../TurnOnFlyModeKeyboardInputHandler.kt | 5 +- ...reativeInventoryScrollMouseInputHandler.kt | 5 +- .../handler/mouse/CursorMouseInputHandler.kt | 9 +- .../handler/touch/JoystickInputHandler.kt | 12 +- .../input/mapper/MouseInputActionMapper.kt | 7 +- .../cavedroid/ux/physics/GamePhysics.java | 5 +- .../cavedroid/ux/rendering/GameRenderer.java | 12 +- .../ux/rendering/TouchControlsRenderer.kt | 6 +- .../windows/SurvivalWindowRenderer.kt | 9 +- core/zygote/build.gradle.kts | 1 + .../cavedroid/zygote}/game/GameProc.java | 6 +- .../cavedroid/zygote/CaveDroidApplication.kt | 87 +++++++++++++ .../zygote/di/ApplicationComponent.kt | 84 ++++++++++++ .../cavedroid/zygote/game/GameScreen.kt | 110 ++++++++++++++++ .../cavedroid/zygote/game/di/GameComponent.kt | 47 +++++++ .../cavedroid/zygote/game/di/GameModule.kt | 122 ++++++++++++++++++ .../cavedroid/zygote/menu/MenuScreen.kt | 61 +++++++++ .../zygote/menu/action/ExitGameAction.kt | 4 +- .../zygote/menu/action/LoadGameAction.kt | 10 +- .../menu/action/NewGameCreativeAction.kt | 4 +- .../menu/action/NewGameSurvivalAction.kt | 4 +- .../cavedroid/zygote/menu/di/MenuComponent.kt | 37 ++++++ .../zygote/menu/input/MenuInputProcessor.kt | 13 +- .../bool/DynamicCameraMenuBooleanOption.kt | 8 +- .../bool/FullscreenMenuBooleanOption.kt | 8 +- .../zygote/menu/renderer/MenuRenderer.kt | 42 +++--- desktop/build.gradle.kts | 2 +- .../cavedroid/desktop/DesktopLauncher.kt | 4 +- settings.gradle.kts | 1 - 65 files changed, 844 insertions(+), 766 deletions(-) delete mode 100644 core/build.gradle.kts rename core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/{GameController.kt => ApplicationController.kt} (81%) create mode 100644 core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/ApplicationContextModule.kt rename core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/{DataConfigurationModule.kt => GameContextModule.kt} (64%) create mode 100644 core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/ApplicationContext.kt create mode 100644 core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/ApplicationContextRepositoryImpl.kt create mode 100644 core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/ApplicationContextStore.kt create mode 100644 core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/ApplicationContextRepository.kt delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/MainConfig.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/game/GameScreen.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuComponent.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuScreen.java delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/BaseGame.kt delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/GameModule.kt delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt rename core/{src/main/java/ru/deadsoftware/cavedroid => zygote/src/main/java/ru/fredboy/cavedroid/zygote}/game/GameProc.java (94%) create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/CaveDroidApplication.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/di/ApplicationComponent.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/GameScreen.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameComponent.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameModule.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/MenuScreen.kt create mode 100644 core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/di/MenuComponent.kt diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 969b11f..ebf9914 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -117,7 +117,8 @@ tasks.whenTaskAdded { dependencies { useCommonModule() - implementation((project(":core"))) + useZygoteModule() + implementation(platform(Dependencies.Kotlin.bom)) implementation(Dependencies.LibGDX.gdx) diff --git a/android/src/main/kotlin/ru/deadsoftware/cavedroid/AndroidLauncher.kt b/android/src/main/kotlin/ru/deadsoftware/cavedroid/AndroidLauncher.kt index b6fff78..129379a 100644 --- a/android/src/main/kotlin/ru/deadsoftware/cavedroid/AndroidLauncher.kt +++ b/android/src/main/kotlin/ru/deadsoftware/cavedroid/AndroidLauncher.kt @@ -3,6 +3,7 @@ package ru.deadsoftware.cavedroid import android.os.Bundle import com.badlogic.gdx.backends.android.AndroidApplication import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration +import ru.fredboy.cavedroid.zygote.CaveDroidApplication class AndroidLauncher : AndroidApplication() { @@ -16,7 +17,7 @@ class AndroidLauncher : AndroidApplication() { config.useImmersiveMode = true initialize( - /* listener = */ CaveGame( + /* listener = */ CaveDroidApplication( gameDataDirectoryPath = gameDataDirectoryPath, isTouchScreen = true, isDebug = BuildConfig.DEBUG, diff --git a/core/build.gradle.kts b/core/build.gradle.kts deleted file mode 100644 index 1dec1e4..0000000 --- a/core/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -plugins { - id("java-library") - id("org.jetbrains.kotlin.jvm") - id("kotlin") - id("idea") - id("org.jetbrains.kotlin.plugin.serialization") version Versions.kotlin - id ("com.google.devtools.ksp") version Versions.ksp -} - -java.sourceCompatibility = ApplicationInfo.sourceCompatibility -java.targetCompatibility = ApplicationInfo.sourceCompatibility - -sourceSets { - buildDir = file("_build") -} - -dependencies { - useAutomultibind() - useDagger() - useLibgdx() - useKotlinxSerializationJson() - useKotlinxSerializationProtobuf() - - useCommonModule() - - useDataModules() - useDomainModules() - useEntityModules() - useGameModules() - useUxModules() - useZygoteModule() - - implementation(Dependencies.jetbrainsAnnotations) -} diff --git a/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/GameController.kt b/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/ApplicationController.kt similarity index 81% rename from core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/GameController.kt rename to core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/ApplicationController.kt index 4574485..36b1f07 100644 --- a/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/GameController.kt +++ b/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/api/ApplicationController.kt @@ -1,6 +1,6 @@ package ru.fredboy.cavedroid.common.api -interface GameController { +interface ApplicationController { fun quitGame() diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/ApplicationContextModule.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/ApplicationContextModule.kt new file mode 100644 index 0000000..aed8055 --- /dev/null +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/ApplicationContextModule.kt @@ -0,0 +1,13 @@ +package ru.fredboy.cavedroid.data.configuration.di + +import dagger.Binds +import dagger.Module +import ru.fredboy.cavedroid.data.configuration.repository.ApplicationContextRepositoryImpl +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository + +@Module +abstract class ApplicationContextModule { + + @Binds + internal abstract fun bindApplicationContextRepository(impl: ApplicationContextRepositoryImpl): ApplicationContextRepository +} \ No newline at end of file diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/DataConfigurationModule.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/GameContextModule.kt similarity index 64% rename from core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/DataConfigurationModule.kt rename to core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/GameContextModule.kt index 68a4fbc..5a2a512 100644 --- a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/DataConfigurationModule.kt +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/di/GameContextModule.kt @@ -6,9 +6,8 @@ import ru.fredboy.cavedroid.data.configuration.repository.GameContextRepositoryI import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository @Module -abstract class DataConfigurationModule { +abstract class GameContextModule { @Binds - internal abstract fun bindGameConfigurationRepository(impl: GameContextRepositoryImpl): GameContextRepository - + internal abstract fun bindGameContextRepository(impl: GameContextRepositoryImpl): GameContextRepository } \ No newline at end of file diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/ApplicationContext.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/ApplicationContext.kt new file mode 100644 index 0000000..02992c2 --- /dev/null +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/ApplicationContext.kt @@ -0,0 +1,9 @@ +package ru.fredboy.cavedroid.data.configuration.model + +class ApplicationContext( + internal val isDebug: Boolean, + internal var isTouch: Boolean, + internal var gameDirectory: String, + internal var width: Float, + internal var height: Float, +) diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/GameContext.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/GameContext.kt index c03c517..d151585 100644 --- a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/GameContext.kt +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/model/GameContext.kt @@ -3,25 +3,12 @@ package ru.fredboy.cavedroid.data.configuration.model import ru.fredboy.cavedroid.common.model.Joystick import ru.fredboy.cavedroid.domain.configuration.model.CameraContext -internal class GameContext { - - var isTouch: Boolean = false - - var gameDirectory: String = "" - - var width: Float = 0f - - var height: Float = 0f - - var showInfo: Boolean = false - - var showMap: Boolean = false - - var joystick: Joystick? = null - - var isFullscreen: Boolean = false - - var useDynamicCamera: Boolean = false - - var cameraContext: CameraContext? = null -} +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 +) diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/ApplicationContextRepositoryImpl.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/ApplicationContextRepositoryImpl.kt new file mode 100644 index 0000000..e5acbbc --- /dev/null +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/ApplicationContextRepositoryImpl.kt @@ -0,0 +1,38 @@ +package ru.fredboy.cavedroid.data.configuration.repository + +import ru.fredboy.cavedroid.data.configuration.store.ApplicationContextStore +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ApplicationContextRepositoryImpl @Inject constructor( + private val applicationContextStore: ApplicationContextStore, +) : ApplicationContextRepository { + + override fun isDebug(): Boolean = applicationContextStore.isDebug + + override fun isTouch(): Boolean = applicationContextStore.isTouch + + override fun getGameDirectory(): String = applicationContextStore.gameDirectory + + override fun getWidth(): Float = applicationContextStore.width + + override fun getHeight(): Float = applicationContextStore.height + + override fun setTouch(isTouch: Boolean) { + applicationContextStore.isTouch = isTouch + } + + override fun setGameDirectory(path: String) { + applicationContextStore.gameDirectory = path + } + + override fun setWidth(width: Float) { + applicationContextStore.width = width + } + + override fun setHeight(height: Float) { + applicationContextStore.height = height + } +} \ No newline at end of file diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/GameContextRepositoryImpl.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/GameContextRepositoryImpl.kt index b3e2b12..0be7a2b 100644 --- a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/GameContextRepositoryImpl.kt +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/repository/GameContextRepositoryImpl.kt @@ -1,6 +1,7 @@ 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 @@ -8,46 +9,24 @@ import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepositor import javax.inject.Inject import javax.inject.Singleton -@Singleton +@GameScope class GameContextRepositoryImpl @Inject constructor( private val gameContextStore: GameContextStore ) : GameContextRepository { - override fun isTouch(): Boolean = gameContextStore.isTouch - - override fun getGameDirectory(): String = gameContextStore.gameDirectory - - override fun getWidth(): Float = gameContextStore.width - - override fun getHeight(): Float = gameContextStore.height + override fun isLoadGame(): Boolean = gameContextStore.isLoadGame override fun shouldShowInfo(): Boolean = gameContextStore.showInfo override fun shouldShowMap(): Boolean = gameContextStore.showMap - override fun getJoystick(): Joystick? = gameContextStore.joystick + 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 setTouch(isTouch: Boolean) { - gameContextStore.isTouch = isTouch - } - - override fun setGameDirectory(path: String) { - gameContextStore.gameDirectory = path - } - - override fun setWidth(width: Float) { - gameContextStore.width = width - } - - override fun setHeight(height: Float) { - gameContextStore.height = height - } + override fun getCameraContext(): CameraContext = gameContextStore.cameraContext override fun setShowInfo(show: Boolean) { gameContextStore.showInfo = show @@ -57,7 +36,7 @@ class GameContextRepositoryImpl @Inject constructor( gameContextStore.showMap = show } - override fun setJoystick(joystick: Joystick?) { + override fun setJoystick(joystick: Joystick) { gameContextStore.joystick = joystick } @@ -65,7 +44,10 @@ class GameContextRepositoryImpl @Inject constructor( if (fullscreen) { Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode); } else { - Gdx.graphics.setWindowedMode(getWidth().toInt(), getHeight().toInt()); + Gdx.graphics.setWindowedMode( + /* width = */ getCameraContext().viewport.width.toInt(), + /* height = */ getCameraContext().viewport.height.toInt(), + ); } gameContextStore.isFullscreen = fullscreen } @@ -74,7 +56,7 @@ class GameContextRepositoryImpl @Inject constructor( gameContextStore.useDynamicCamera = use } - override fun setCameraContext(cameraContext: CameraContext?) { + override fun setCameraContext(cameraContext: CameraContext) { gameContextStore.cameraContext = cameraContext } } diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/ApplicationContextStore.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/ApplicationContextStore.kt new file mode 100644 index 0000000..eaf4bee --- /dev/null +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/ApplicationContextStore.kt @@ -0,0 +1,33 @@ +package ru.fredboy.cavedroid.data.configuration.store + +import ru.fredboy.cavedroid.data.configuration.model.ApplicationContext +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ApplicationContextStore @Inject constructor( + private val applicationContext: ApplicationContext, +) { + + private val lock = Any() + + val isDebug: Boolean + get() = synchronized(lock) { applicationContext.isDebug } + + var isTouch: Boolean + get() = synchronized(lock) { applicationContext.isTouch } + set(value) = synchronized(lock) { applicationContext.isTouch = value } + + var gameDirectory: String + get() = synchronized(lock) { applicationContext.gameDirectory } + set(value) = synchronized(lock) { applicationContext.gameDirectory = value } + + var width: Float + get() = synchronized(lock) { applicationContext.width } + set(value) = synchronized(lock) { applicationContext.width = value } + + var height: Float + get() = synchronized(lock) { applicationContext.height } + set(value) = synchronized(lock) { applicationContext.height = value } + +} \ No newline at end of file diff --git a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/GameContextStore.kt b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/GameContextStore.kt index eb35986..268a887 100644 --- a/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/GameContextStore.kt +++ b/core/data/configuration/src/main/kotlin/ru/fredboy/cavedroid/data/configuration/store/GameContextStore.kt @@ -1,34 +1,20 @@ package ru.fredboy.cavedroid.data.configuration.store -import com.badlogic.gdx.graphics.OrthographicCamera +import ru.fredboy.cavedroid.common.di.GameScope import ru.fredboy.cavedroid.common.model.Joystick import ru.fredboy.cavedroid.domain.configuration.model.CameraContext import ru.fredboy.cavedroid.data.configuration.model.GameContext import javax.inject.Inject -import javax.inject.Singleton -@Singleton -class GameContextStore @Inject constructor() { +@GameScope +class GameContextStore @Inject constructor( + private val gameContext: GameContext +) { private val lock = Any() - private val gameContext = GameContext() - - var isTouch: Boolean - get() = synchronized(lock) { gameContext.isTouch } - set(value) = synchronized(lock) { gameContext.isTouch = value } - - var gameDirectory: String - get() = synchronized(lock) { gameContext.gameDirectory } - set(value) = synchronized(lock) { gameContext.gameDirectory = value } - - var width: Float - get() = synchronized(lock) { gameContext.width } - set(value) = synchronized(lock) { gameContext.width = value } - - var height: Float - get() = synchronized(lock) { gameContext.height } - set(value) = synchronized(lock) { gameContext.height = value } + val isLoadGame: Boolean + get() = gameContext.isLoadGame var showInfo: Boolean get() = synchronized(lock) { gameContext.showInfo } @@ -38,7 +24,7 @@ class GameContextStore @Inject constructor() { get() = synchronized(lock) { gameContext.showMap } set(value) = synchronized(lock) { gameContext.showMap = value } - var joystick: Joystick? + var joystick: Joystick get() = synchronized(lock) { gameContext.joystick } set(value) = synchronized(lock) { gameContext.joystick = value } @@ -50,7 +36,7 @@ class GameContextStore @Inject constructor() { get() = synchronized(lock) { gameContext.useDynamicCamera } set(value) = synchronized(lock) { gameContext.useDynamicCamera = value } - var cameraContext: CameraContext? + var cameraContext: CameraContext get() = synchronized(lock) { gameContext.cameraContext } set(value) = synchronized(lock) { gameContext.cameraContext = value } diff --git a/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/ApplicationContextRepository.kt b/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/ApplicationContextRepository.kt new file mode 100644 index 0000000..9bc739a --- /dev/null +++ b/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/ApplicationContextRepository.kt @@ -0,0 +1,23 @@ +package ru.fredboy.cavedroid.domain.configuration.repository + +interface ApplicationContextRepository { + + fun isDebug(): Boolean + + fun isTouch(): Boolean + + fun getGameDirectory(): String + + fun getWidth(): Float + + fun getHeight(): Float + + fun setTouch(isTouch: Boolean) + + fun setGameDirectory(path: String) + + fun setWidth(width: Float) + + fun setHeight(height: Float) + +} \ No newline at end of file diff --git a/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/GameContextRepository.kt b/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/GameContextRepository.kt index ab393b6..2f0692d 100644 --- a/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/GameContextRepository.kt +++ b/core/domain/configuration/src/main/kotlin/ru/fredboy/cavedroid/domain/configuration/repository/GameContextRepository.kt @@ -5,44 +5,30 @@ import ru.fredboy.cavedroid.domain.configuration.model.CameraContext interface GameContextRepository { - fun isTouch(): Boolean - - fun getGameDirectory(): String - - fun getWidth(): Float - - fun getHeight(): Float + fun isLoadGame(): Boolean fun shouldShowInfo(): Boolean fun shouldShowMap(): Boolean - fun getJoystick(): Joystick? + fun getJoystick(): Joystick fun isFullscreen(): Boolean fun useDynamicCamera(): Boolean - fun getCameraContext(): CameraContext? - - fun setTouch(isTouch: Boolean) - - fun setGameDirectory(path: String) - - fun setWidth(width: Float) - - fun setHeight(height: Float) + fun getCameraContext(): CameraContext fun setShowInfo(show: Boolean) fun setShowMap(show: Boolean) - fun setJoystick(joystick: Joystick?) + fun setJoystick(joystick: Joystick) fun setFullscreen(fullscreen: Boolean) fun setUseDynamicCamera(use: Boolean) - fun setCameraContext(cameraContext: CameraContext?) + fun setCameraContext(cameraContext: CameraContext) } diff --git a/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt b/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt index 1bd0835..36a8bb5 100644 --- a/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt +++ b/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt @@ -266,7 +266,7 @@ class Player( const val WIDTH = 4f const val HEIGHT = 30f - private const val SPEED = 69.072f + const val SPEED = 69.072f private const val JUMP_VELOCITY = -133.332f private val HIT_ANIMATION_RANGE = 30f..90f diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/MainConfig.java b/core/src/main/java/ru/deadsoftware/cavedroid/MainConfig.java deleted file mode 100644 index 4f884c0..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/MainConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.deadsoftware.cavedroid; - -import org.jetbrains.annotations.Nullable; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class MainConfig { - - @Nullable - private MainComponent mMainComponent; - - @Inject - public MainConfig() { - } - - public MainComponent getMainComponent() { - assert mMainComponent != null; - return mMainComponent; - } - - public void setMainComponent(MainComponent mainComponent) { - mMainComponent = mainComponent; - } -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java deleted file mode 100644 index a0b780f..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.deadsoftware.cavedroid.game; - -import dagger.Component; -import ru.deadsoftware.cavedroid.MainComponent; -import ru.deadsoftware.cavedroid.generated.module.*; -import ru.fredboy.cavedroid.common.api.GameController; -import ru.fredboy.cavedroid.common.di.GameScope; -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository; -import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository; -import ru.fredboy.cavedroid.game.controller.container.di.ControllerContainerModule; -import ru.fredboy.cavedroid.game.controller.drop.di.ControllerDropModule; -import ru.fredboy.cavedroid.game.world.di.GameWorldModule; - -@GameScope -@Component(dependencies = { - MainComponent.class - }, - modules = {GameModule.class, - UseItemActionsModule.class, - UpdateBlockActionsModule.class, - PlaceBlockActionsModule.class, - RenderModule.class, - KeyboardInputHandlersModule.class, - MouseInputHandlersModule.class, - UseBlockActionsModule.class, - GameWorldModule.class, - ControllerContainerModule.class, - ControllerDropModule.class - }) -public interface GameComponent { - GameProc getGameProc(); - - ItemsRepository getItemsRepository(); - - GameContextRepository getGameConfigurationRepository(); - - GameController getGameController(); -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java deleted file mode 100644 index 2196a99..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java +++ /dev/null @@ -1,89 +0,0 @@ -package ru.deadsoftware.cavedroid.game; - -import dagger.Module; -import dagger.Provides; -import ru.fredboy.cavedroid.common.di.GameScope; -import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository; -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository; -import ru.fredboy.cavedroid.domain.items.model.block.Block; -import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository; -import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase; -import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase; -import ru.fredboy.cavedroid.domain.save.model.GameMapSaveData; -import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository; -import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory; -import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter; -import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter; -import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter; -import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter; -import ru.fredboy.cavedroid.game.controller.container.ContainerController; -import ru.fredboy.cavedroid.game.controller.drop.DropController; -import ru.fredboy.cavedroid.game.controller.mob.MobController; -import ru.fredboy.cavedroid.game.world.GameWorld; - -@Module -public class GameModule { - - private static boolean needLoad = false; - - public static void setNeedLoad(final boolean needLoad) { - GameModule.needLoad = needLoad; - } - - @Provides - @GameScope - public static DropController provideDropController(GameContextRepository gameContextRepository, - SaveDataRepository saveDataRepository, - ItemsRepository itemsRepository, - DropWorldAdapter dropWorldAdapter) { - - DropController controller = needLoad - ? saveDataRepository.loadDropController(gameContextRepository.getGameDirectory(), dropWorldAdapter) - : new DropController(itemsRepository, dropWorldAdapter); - - return controller; - } - - @Provides - @GameScope - public static ContainerController provideFurnaceController(GameContextRepository gameContextRepository, - SaveDataRepository saveDataRepository, - GetItemByKeyUseCase getItemByKeyUseCase, - ContainerWorldAdapter containerWorldAdapter, - ContainerFactory containerFactory, - DropAdapter dropAdapter) { - ContainerController controller = needLoad - ? saveDataRepository.loadContainerController(gameContextRepository.getGameDirectory(), containerWorldAdapter, containerFactory, dropAdapter) - : new ContainerController(getItemByKeyUseCase, containerWorldAdapter, containerFactory, dropAdapter); - - return controller; - } - - @Provides - @GameScope - public static MobController provideMobsController(GameContextRepository gameContextRepository, - SaveDataRepository saveDataRepository, - MobAssetsRepository mobAssetsRepository, - GetFallbackItemUseCase getFallbackItemUseCase, - MobWorldAdapter mobWorldAdapter) { - - return needLoad - ? saveDataRepository.loadMobController(gameContextRepository.getGameDirectory(), mobWorldAdapter) - : new MobController(mobAssetsRepository, getFallbackItemUseCase, mobWorldAdapter); - } - - @Provides - @GameScope - public static GameWorld provideGameWorld(GameContextRepository gameContextRepository, - SaveDataRepository saveDataRepository, - ItemsRepository itemsRepository) { - - final GameMapSaveData mapData = needLoad ? saveDataRepository.loadMap(gameContextRepository.getGameDirectory()) : null; - - Block[][] fm = mapData != null ? mapData.retrieveForeMap() : null; - Block[][] bm = mapData != null ? mapData.retrieveBackMap() : null; - - return new GameWorld(itemsRepository, fm, bm); - } - -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScreen.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScreen.java deleted file mode 100644 index 160c0b0..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScreen.java +++ /dev/null @@ -1,89 +0,0 @@ -package ru.deadsoftware.cavedroid.game; - -import com.badlogic.gdx.Screen; -import org.jetbrains.annotations.Nullable; -import ru.deadsoftware.cavedroid.MainConfig; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class GameScreen implements Screen { - - private final MainConfig mMainConfig; - - @Nullable - private GameProc mGameProc; - - @Inject - public GameScreen(MainConfig mainConfig) { - mMainConfig = mainConfig; - } - - public void newGame(int gameMode) { - if (mGameProc != null) { - mGameProc.dispose(); - } - - GameModule.setNeedLoad(false); - - GameComponent gameComponent = DaggerGameComponent.builder() - .mainComponent(mMainConfig.getMainComponent()).build(); - - mGameProc = gameComponent.getGameProc(); - - mGameProc.setPlayerGameMode(gameMode); - } - - public void loadGame() { - if (mGameProc != null) { - mGameProc.dispose(); - } - - GameModule.setNeedLoad(true); - - GameComponent gameComponent = DaggerGameComponent.builder() - .mainComponent(mMainConfig.getMainComponent()).build(); - - mGameProc = gameComponent.getGameProc(); - } - - @Override - public void render(float delta) { - mGameProc.update(delta); - } - - @Override - public void show() { -// Gdx.input.setInputProcessor(mGameInputProcessor); - mGameProc.show(); - } - - @Override - public void resize(int width, int height) { - - } - - @Override - public void pause() { - - } - - @Override - public void resume() { - - } - - @Override - public void hide() { - - } - - @Override - public void dispose() { - if (mGameProc != null) { - mGameProc.dispose(); - } - } - -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuComponent.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuComponent.java deleted file mode 100644 index 9d7bec6..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuComponent.java +++ /dev/null @@ -1,25 +0,0 @@ -package ru.deadsoftware.cavedroid.menu; - -import dagger.Component; -import ru.deadsoftware.cavedroid.MainComponent; -import ru.deadsoftware.cavedroid.generated.module.MenuActionsModule; -import ru.fredboy.cavedroid.common.di.MenuScope; -import ru.fredboy.cavedroid.data.menu.di.DataMenuModule; -import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository; -import ru.fredboy.cavedroid.game.controller.container.di.ControllerContainerModule; -import ru.fredboy.cavedroid.game.controller.drop.di.ControllerDropModule; -import ru.fredboy.cavedroid.zygote.menu.input.MenuInputProcessor; -import ru.fredboy.cavedroid.zygote.menu.renderer.MenuRenderer; -import ru.deadsoftware.cavedroid.generated.module.MenuBooleanOptionsModule; - -@MenuScope -@Component(dependencies = MainComponent.class, modules = {ControllerContainerModule.class, - ControllerDropModule.class, DataMenuModule.class, MenuBooleanOptionsModule.class, MenuActionsModule.class}) -public interface MenuComponent { - - public MenuRenderer menuRenderer(); - - public MenuInputProcessor menuInputProcessor(); - - public MenuButtonRepository menuButtonsRepository(); -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuScreen.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuScreen.java deleted file mode 100644 index cdb9733..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuScreen.java +++ /dev/null @@ -1,70 +0,0 @@ -package ru.deadsoftware.cavedroid.menu; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Screen; -import ru.deadsoftware.cavedroid.MainConfig; -import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository; -import ru.fredboy.cavedroid.zygote.menu.input.MenuInputProcessor; -import ru.fredboy.cavedroid.zygote.menu.renderer.MenuRenderer; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class MenuScreen implements Screen { - - private final MenuRenderer mMenuRenderer; - - private final MenuInputProcessor mMenuInputProcessor; - - private final MenuButtonRepository mMenuButtonsRepository; - - @Inject - public MenuScreen(MainConfig mainConfig) { - MenuComponent menuComponent = DaggerMenuComponent.builder() - .mainComponent(mainConfig.getMainComponent()).build(); - - mMenuRenderer = menuComponent.menuRenderer(); - mMenuInputProcessor = menuComponent.menuInputProcessor(); - mMenuButtonsRepository = menuComponent.menuButtonsRepository(); - } - - public void resetMenu() { - mMenuButtonsRepository.setCurrentMenu("main"); - } - - @Override - public void show() { - Gdx.input.setInputProcessor(mMenuInputProcessor); - } - - @Override - public void render(float delta) { - mMenuRenderer.render(delta); - } - - @Override - public void resize(int width, int height) { - - } - - @Override - public void pause() { - - } - - @Override - public void resume() { - - } - - @Override - public void hide() { - - } - - @Override - public void dispose() { - - } -} diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/BaseGame.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/BaseGame.kt deleted file mode 100644 index 5b5fc77..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/BaseGame.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ru.deadsoftware.cavedroid - -import com.badlogic.gdx.Game -import ru.fredboy.cavedroid.common.api.GameController - -abstract class BaseGame : Game(), GameController \ No newline at end of file diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt deleted file mode 100644 index 7c1fcba..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt +++ /dev/null @@ -1,104 +0,0 @@ -package ru.deadsoftware.cavedroid - -import com.badlogic.gdx.Application -import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.OrthographicCamera -import com.badlogic.gdx.math.Rectangle -import ru.fredboy.cavedroid.common.api.PreferencesStore -import ru.fredboy.cavedroid.common.utils.ratio -import ru.fredboy.cavedroid.domain.configuration.model.CameraContext -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository - -class CaveGame( - private val gameDataDirectoryPath: String, - private val isTouchScreen: Boolean, - private val isDebug: Boolean, - private val preferencesStore: PreferencesStore, -) : BaseGame() { - - private val mainComponent: MainComponent - private val mainConfig: MainConfig - - private val mGameContextRepository: GameContextRepository - - init { - mainComponent = DaggerMainComponent.builder() - .caveGame(this) - .preferencesStore(preferencesStore) - .build() - - mainConfig = mainComponent.mainConfig - mGameContextRepository = mainComponent.gameContextRepository - } - - private fun initMainConfig() { - val width = DEFAULT_VIEWPORT_WIDTH - val height = width / Gdx.graphics.ratio - - mainConfig.mainComponent = mainComponent - - mGameContextRepository.apply { - setGameDirectory(gameDataDirectoryPath) - setTouch(isTouchScreen) - setWidth(width) - setHeight(height) - setShowInfo(isDebug) - - setCameraContext( - CameraContext( - viewport = Rectangle(0f, 0f, width, height), - camera = OrthographicCamera().apply { - setToOrtho(true, width, height) - } - ) - ) - } - - Gdx.app.logLevel = if (isDebug) Application.LOG_DEBUG else Application.LOG_ERROR - } - - fun newGame(gameMode: Int) { - setScreen(mainComponent.gameScreen.apply { newGame(gameMode) }) - } - - override fun newGameCreative() { - newGame(1) - } - - override fun newGameSurvival() { - newGame(0) - } - - override fun loadGame() { - setScreen(mainComponent.gameScreen.apply { loadGame() }) - } - - override fun quitGame() { - screen?.dispose() - setScreen(mainComponent.menuScreen.apply { resetMenu() }) - } - - override fun exitGame() { - Gdx.app.exit() - } - - override fun create() { - Gdx.files.absolute(gameDataDirectoryPath).mkdirs() - initMainConfig() - - mainComponent.initializeAssetsUseCase() - setScreen(mainComponent.menuScreen) - } - - override fun dispose() { - screen?.dispose() - mainComponent.disposeAssetsUseCase() - } - - - companion object { - private const val TAG = "CaveGame" - private const val DEFAULT_VIEWPORT_WIDTH = 480f - } - -} \ No newline at end of file diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/GameModule.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/GameModule.kt deleted file mode 100644 index 43e936e..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/GameModule.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ru.deadsoftware.cavedroid - -import dagger.Binds -import dagger.Module -import ru.fredboy.cavedroid.common.api.GameController - -@Module -abstract class GameModule { - - @Binds - internal abstract fun bindGameController(impl: CaveGame): GameController - -} \ No newline at end of file diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt deleted file mode 100644 index 5448118..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt +++ /dev/null @@ -1,59 +0,0 @@ -package ru.deadsoftware.cavedroid - -import dagger.Component -import ru.deadsoftware.cavedroid.game.GameScreen -import ru.deadsoftware.cavedroid.menu.MenuScreen -import ru.fredboy.cavedroid.common.api.PreferencesStore -import ru.fredboy.cavedroid.common.api.GameController -import ru.fredboy.cavedroid.data.assets.di.DataAssetsModule -import ru.fredboy.cavedroid.data.configuration.di.DataConfigurationModule -import ru.fredboy.cavedroid.data.items.di.DataItemsModule -import ru.fredboy.cavedroid.data.save.di.DataSaveModule -import ru.fredboy.cavedroid.domain.assets.repository.* -import ru.fredboy.cavedroid.domain.assets.usecase.DisposeAssetsUseCase -import ru.fredboy.cavedroid.domain.assets.usecase.InitializeAssetsUseCase -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository -import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository -import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository -import javax.inject.Singleton - -@Singleton -@Component( - dependencies = [CaveGame::class, PreferencesStore::class], - modules = [DataAssetsModule::class, DataItemsModule::class, DataSaveModule::class, DataConfigurationModule::class, GameModule::class] -) -interface MainComponent { - - val gameScreen: GameScreen - - val menuScreen: MenuScreen - - val mainConfig: MainConfig - - val initializeAssetsUseCase: InitializeAssetsUseCase - - val disposeAssetsUseCase: DisposeAssetsUseCase - - val blockAssetsRepository: BlockAssetsRepository - - val blockDamageAssetsRepository: BlockDamageAssetsRepository - - val fontAssetsRepository: FontAssetsRepository - - val mobAssetsRepository: MobAssetsRepository - - val itemAssetsRepository: ItemsAssetsRepository - - val textureRegionsAssetsRepository: TextureRegionsAssetsRepository - - val touchButtonsAssetsRepository: TouchButtonsAssetsRepository - - val itemsRepository: ItemsRepository - - val saveDataRepository: SaveDataRepository - - val gameContextRepository: GameContextRepository - - val gameController: GameController - -} \ No newline at end of file diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/GameInputProcessor.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/GameInputProcessor.kt index ef041e3..f306315 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/GameInputProcessor.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/GameInputProcessor.kt @@ -9,6 +9,7 @@ import ru.fredboy.cavedroid.common.model.Joystick import ru.fredboy.cavedroid.domain.assets.model.TouchButton import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase import ru.fredboy.cavedroid.domain.configuration.model.CameraContext +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.game.controller.mob.MobController import ru.fredboy.cavedroid.game.window.GameWindowType @@ -25,6 +26,7 @@ import kotlin.math.abs @GameScope class GameInputProcessor @Inject constructor( + private val applicationContextRepository: ApplicationContextRepository, private val gameContextRepository: GameContextRepository, private val mobController: MobController, private val getTouchButtonsUseCase: GetTouchButtonsUseCase, @@ -38,10 +40,10 @@ class GameInputProcessor @Inject constructor( private val mouseLeftTouchButton = TouchButton( Rectangle( - /* x = */ gameContextRepository.getWidth() / 2, + /* x = */ applicationContextRepository.getWidth() / 2, /* y = */ 0f, - /* width = */ gameContextRepository.getWidth() / 2, - /* height = */ gameContextRepository.getHeight() / 2 + /* width = */ applicationContextRepository.getWidth() / 2, + /* height = */ applicationContextRepository.getHeight() / 2 ), Input.Buttons.LEFT, true @@ -49,10 +51,10 @@ class GameInputProcessor @Inject constructor( private val mouseRightTouchButton = TouchButton( Rectangle( - /* x = */ gameContextRepository.getWidth() / 2, - /* y = */ gameContextRepository.getHeight() / 2, - /* width = */ gameContextRepository.getWidth() / 2, - /* height = */ gameContextRepository.getHeight() / 2 + /* x = */ applicationContextRepository.getWidth() / 2, + /* y = */ applicationContextRepository.getHeight() / 2, + /* width = */ applicationContextRepository.getWidth() / 2, + /* height = */ applicationContextRepository.getHeight() / 2 ), Input.Buttons.RIGHT, true @@ -83,7 +85,7 @@ class GameInputProcessor @Inject constructor( touchDownX = touchX touchDownY = touchY - if (gameContextRepository.isTouch()) { + if (applicationContextRepository.isTouch()) { val touchedKey = getTouchedKey(touchX, touchY) return if (touchedKey.isMouse) { onMouseActionEvent( @@ -106,7 +108,7 @@ class GameInputProcessor @Inject constructor( val joy: Joystick? = gameContextRepository.getJoystick() - if (gameContextRepository.isTouch()) { + if (applicationContextRepository.isTouch()) { if (joy != null && joy.active && joy.pointer == pointer) { return onMouseActionEvent( mouseX = screenX, diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyDownKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyDownKeyboardInputHandler.kt index 0484af2..4140e4e 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyDownKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyDownKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,14 +14,14 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class FlyDownKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { return action.actionKey is KeyboardInputActionKey.Down && mobController.player.isFlyMode && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyUpKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyUpKeyboardInputHandler.kt index d01b8e2..267aa64 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyUpKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/FlyUpKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,7 +14,7 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class FlyUpKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { @@ -21,7 +22,7 @@ class FlyUpKeyboardInputHandler @Inject constructor( return action.actionKey is KeyboardInputActionKey.Up && !mobController.player.swim && mobController.player.isFlyMode && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoLeftKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoLeftKeyboardInputHandler.kt index 7ae5326..7093770 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoLeftKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoLeftKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Direction import ru.fredboy.cavedroid.entity.mob.model.Player @@ -14,12 +15,12 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class GoLeftKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { - val isTouch = gameContextRepository.isTouch() + val isTouch = applicationContextRepository.isTouch() return action.actionKey is KeyboardInputActionKey.Left && (mobController.player.controlMode == Player.ControlMode.WALK || !isTouch) && (mobController.player.controlMode == Player.ControlMode.WALK || !isTouch) diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoRightKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoRightKeyboardInputHandler.kt index 861db28..dbb165d 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoRightKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/GoRightKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Direction import ru.fredboy.cavedroid.entity.mob.model.Player @@ -14,13 +15,13 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class GoRightKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { return action.actionKey is KeyboardInputActionKey.Right && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/JumpKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/JumpKeyboardInputHandler.kt index 7c644c4..fbd729d 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/JumpKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/JumpKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,7 +14,7 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class JumpKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { @@ -21,7 +22,7 @@ class JumpKeyboardInputHandler @Inject constructor( return action.actionKey is KeyboardInputActionKey.Up && mobController.player.canJump && !mobController.player.isFlyMode && action.isKeyDown && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/MoveCursorControlsModeKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/MoveCursorControlsModeKeyboardInputHandler.kt index a08e582..2c74f55 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/MoveCursorControlsModeKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/MoveCursorControlsModeKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,12 +14,12 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class MoveCursorControlsModeKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobsController: MobController, ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { - return gameContextRepository.isTouch() && + return applicationContextRepository.isTouch() && mobsController.player.controlMode == Player.ControlMode.CURSOR && action.isKeyDown && (action.actionKey is KeyboardInputActionKey.Left || action.actionKey is KeyboardInputActionKey.Right || diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/PauseGameKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/PauseGameKeyboardInputHandler.kt index 2ef3464..25f598c 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/PauseGameKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/PauseGameKeyboardInputHandler.kt @@ -1,7 +1,8 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard -import ru.fredboy.cavedroid.common.api.GameController +import ru.fredboy.cavedroid.common.api.ApplicationController import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository import ru.fredboy.cavedroid.game.controller.container.ContainerController @@ -19,8 +20,8 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class PauseGameKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, - private val gameController: GameController, + private val applicationContextRepository: ApplicationContextRepository, + private val gameController: ApplicationController, private val dropController: DropController, private val mobController: MobController, private val gameWorld: GameWorld, @@ -40,7 +41,7 @@ class PauseGameKeyboardInputHandler @Inject constructor( } saveDataRepository.save( - gameDataFolder = gameContextRepository.getGameDirectory(), + gameDataFolder = applicationContextRepository.getGameDirectory(), dropController = dropController, mobController = mobController, containerController = containerController, diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/StopSwimKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/StopSwimKeyboardInputHandler.kt index 699de98..8564309 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/StopSwimKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/StopSwimKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,14 +14,14 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class StopSwimKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { return action.actionKey is KeyboardInputActionKey.Up && !action.isKeyDown && mobController.player.swim && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/SwimUpKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/SwimUpKeyboardInputHandler.kt index e00ff62..5a5b67a 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/SwimUpKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/SwimUpKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -14,7 +15,7 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class SwimUpKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, private val gameWorld: GameWorld, ) : IKeyboardInputHandler { @@ -28,7 +29,7 @@ class SwimUpKeyboardInputHandler @Inject constructor( !mobController.player.swim && !mobController.player.canJump && checkSwim() && !mobController.player.isFlyMode && - (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/ToggleControlsModeKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/ToggleControlsModeKeyboardInputHandler.kt index cad0419..e39c71f 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/ToggleControlsModeKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/ToggleControlsModeKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,13 +14,13 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class ToggleControlsModeKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, ) : IKeyboardInputHandler { override fun checkConditions(action: KeyboardInputAction): Boolean { return action.actionKey is KeyboardInputActionKey.SwitchControlsMode && !action.isKeyDown - && gameContextRepository.isTouch() + && applicationContextRepository.isTouch() } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/TurnOnFlyModeKeyboardInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/TurnOnFlyModeKeyboardInputHandler.kt index 871055a..3f69b77 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/TurnOnFlyModeKeyboardInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/keyboard/TurnOnFlyModeKeyboardInputHandler.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -13,7 +14,7 @@ import javax.inject.Inject @GameScope @BindKeyboardInputHandler class TurnOnFlyModeKeyboardInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobsController: MobController, ) : IKeyboardInputHandler { @@ -21,7 +22,7 @@ class TurnOnFlyModeKeyboardInputHandler @Inject constructor( return mobsController.player.gameMode == 1 && action.actionKey is KeyboardInputActionKey.Up && !mobsController.player.swim && !mobsController.player.isFlyMode && !mobsController.player.canJump && action.isKeyDown && - (mobsController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch()) + (mobsController.player.controlMode == Player.ControlMode.WALK || !applicationContextRepository.isTouch()) } override fun handle(action: KeyboardInputAction) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt index b92550b..ef0ec2e 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt @@ -3,6 +3,7 @@ package ru.fredboy.cavedroid.ux.controls.input.handler.mouse import com.badlogic.gdx.math.MathUtils import ru.fredboy.cavedroid.common.di.GameScope import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository import ru.fredboy.cavedroid.game.window.GameWindowType @@ -19,7 +20,7 @@ import kotlin.math.abs @GameScope @BindMouseInputHandler class CreativeInventoryScrollMouseInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val gameWindowsManager: GameWindowsManager, private val itemsRepository: ItemsRepository, private val textureRegions: GetTextureRegionByNameUseCase, @@ -48,7 +49,7 @@ class CreativeInventoryScrollMouseInputHandler @Inject constructor( } private fun checkDragConditions(action: MouseInputAction): Boolean { - return gameContextRepository.isTouch() && action.actionKey is MouseInputActionKey.Dragged && + return applicationContextRepository.isTouch() && action.actionKey is MouseInputActionKey.Dragged && abs(action.screenY - dragStartY) >= DRAG_SENSITIVITY } diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CursorMouseInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CursorMouseInputHandler.kt index 903be03..a8f5d1e 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CursorMouseInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/mouse/CursorMouseInputHandler.kt @@ -5,6 +5,7 @@ import ru.fredboy.cavedroid.common.di.GameScope import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase import ru.fredboy.cavedroid.common.utils.bl import ru.fredboy.cavedroid.common.utils.px +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.domain.items.model.block.Block import ru.fredboy.cavedroid.domain.items.usecase.GetItemByIndexUseCase @@ -25,7 +26,7 @@ import javax.inject.Inject @GameScope @BindMouseInputHandler class CursorMouseInputHandler @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, private val gameWorld: GameWorld, private val gameWindowsManager: GameWindowsManager, @@ -129,13 +130,13 @@ class CursorMouseInputHandler @Inject constructor( val pastCursorY = player.cursorY when { - player.controlMode == Player.ControlMode.WALK && gameContextRepository.isTouch() -> handleWalkTouch() - !gameContextRepository.isTouch() -> handleMouse(action) + player.controlMode == Player.ControlMode.WALK && applicationContextRepository.isTouch() -> handleWalkTouch() + !applicationContextRepository.isTouch() -> handleMouse(action) } mobController.checkPlayerCursorBounds() - if (player.controlMode == Player.ControlMode.WALK && gameContextRepository.isTouch()) { + if (player.controlMode == Player.ControlMode.WALK && applicationContextRepository.isTouch()) { setPlayerDirectionToCursor() } diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/touch/JoystickInputHandler.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/touch/JoystickInputHandler.kt index 5d68933..b184d42 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/touch/JoystickInputHandler.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/touch/JoystickInputHandler.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.utils.TimeUtils import ru.fredboy.cavedroid.common.di.GameScope import ru.fredboy.cavedroid.common.model.Joystick import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Direction import ru.fredboy.cavedroid.entity.mob.model.Player @@ -21,6 +22,7 @@ import javax.inject.Inject @GameScope @BindMouseInputHandler class JoystickInputHandler @Inject constructor( + private val applicationContextRepository: ApplicationContextRepository, private val gameContextRepository: GameContextRepository, private val mobController: MobController, private val gameWindowsManager: GameWindowsManager, @@ -55,11 +57,11 @@ class JoystickInputHandler @Inject constructor( override fun checkConditions(action: MouseInputAction): Boolean { return gameWindowsManager.currentWindowType == GameWindowType.NONE && - gameContextRepository.isTouch() && + applicationContextRepository.isTouch() && // mobsController.player.controlMode == Player.ControlMode.WALK && gameContextRepository.getJoystick() != null && (action.actionKey is MouseInputActionKey.Touch) && - (action.actionKey.pointer == gameContextRepository.getJoystick()?.pointer || !active) && + (action.actionKey.pointer == gameContextRepository.getJoystick().pointer || !active) && ((action.actionKey is MouseInputActionKey.Dragged) || (action.screenX < action.cameraViewport.width / 2 && !action.actionKey.touchUp || active)) && !(action.actionKey is MouseInputActionKey.Screen && action.isInsideHotbar(textureRegions)) @@ -68,7 +70,7 @@ class JoystickInputHandler @Inject constructor( private fun handleTouchDown(action: MouseInputAction) { val key = action.actionKey as MouseInputActionKey.Screen - gameContextRepository.getJoystick()?.activate(action.screenX, action.screenY, key.pointer) ?: return + gameContextRepository.getJoystick().activate(action.screenX, action.screenY, key.pointer) active = true } @@ -78,7 +80,7 @@ class JoystickInputHandler @Inject constructor( } private fun handleCursor() { - val joystick = gameContextRepository.getJoystick() ?: return + val joystick = gameContextRepository.getJoystick() if (TimeUtils.timeSinceMillis(cursorTimeoutMs) < 150L) { return @@ -114,7 +116,7 @@ class JoystickInputHandler @Inject constructor( return } - val joystick = gameContextRepository.getJoystick() ?: return + val joystick = gameContextRepository.getJoystick() val joyVector = joystick.getVelocityVector() if (mobController.player.isFlyMode) { diff --git a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/mapper/MouseInputActionMapper.kt b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/mapper/MouseInputActionMapper.kt index 20ece8d..df3ef8d 100644 --- a/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/mapper/MouseInputActionMapper.kt +++ b/core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/mapper/MouseInputActionMapper.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.math.Rectangle import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.ux.controls.input.action.MouseInputAction import ru.fredboy.cavedroid.ux.controls.input.action.keys.MouseInputActionKey @@ -11,7 +12,7 @@ import javax.inject.Inject @GameScope class MouseInputActionMapper @Inject constructor( - val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, ) { fun map( @@ -72,11 +73,11 @@ class MouseInputActionMapper @Inject constructor( } private fun getScreenX(mouseX: Float): Float { - return mouseX * (gameContextRepository.getWidth() / Gdx.graphics.width) + return mouseX * (applicationContextRepository.getWidth() / Gdx.graphics.width) } private fun getScreenY(mouseY: Float): Float { - return mouseY * (gameContextRepository.getHeight() / Gdx.graphics.height) + return mouseY * (applicationContextRepository.getHeight() / Gdx.graphics.height) } } \ No newline at end of file diff --git a/core/ux/physics/src/main/java/ru/fredboy/cavedroid/ux/physics/GamePhysics.java b/core/ux/physics/src/main/java/ru/fredboy/cavedroid/ux/physics/GamePhysics.java index 976e8ed..511f6d8 100644 --- a/core/ux/physics/src/main/java/ru/fredboy/cavedroid/ux/physics/GamePhysics.java +++ b/core/ux/physics/src/main/java/ru/fredboy/cavedroid/ux/physics/GamePhysics.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import ru.fredboy.cavedroid.common.di.GameScope; import ru.fredboy.cavedroid.common.utils.MeasureUnitsUtilsKt; +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository; import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository; import ru.fredboy.cavedroid.domain.items.model.block.Block; import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem; @@ -32,14 +33,14 @@ public class GamePhysics { private final Vector2 gravity = new Vector2(0, 444.44f); private final GameWorld mGameWorld; - private final GameContextRepository mGameContextRepository; + private final ApplicationContextRepository mGameContextRepository; private final MobController mMobController; private final DropController mDropController; private final GetItemByKeyUseCase mGetItemByKeyUseCase; @Inject public GamePhysics(GameWorld gameWorld, - GameContextRepository gameContextRepository, + ApplicationContextRepository gameContextRepository, MobController mobController, DropController dropController, GetItemByKeyUseCase getItemByKeyUseCase) { diff --git a/core/ux/rendering/src/main/java/ru/fredboy/cavedroid/ux/rendering/GameRenderer.java b/core/ux/rendering/src/main/java/ru/fredboy/cavedroid/ux/rendering/GameRenderer.java index 8d0f866..94bb385 100644 --- a/core/ux/rendering/src/main/java/ru/fredboy/cavedroid/ux/rendering/GameRenderer.java +++ b/core/ux/rendering/src/main/java/ru/fredboy/cavedroid/ux/rendering/GameRenderer.java @@ -14,6 +14,7 @@ import ru.fredboy.cavedroid.common.utils.MeasureUnitsUtilsKt; import ru.fredboy.cavedroid.common.utils.RenderingUtilsKt; import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase; import ru.fredboy.cavedroid.domain.configuration.model.CameraContext; +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository; import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository; import ru.fredboy.cavedroid.entity.mob.model.Player; import ru.fredboy.cavedroid.game.controller.mob.MobController; @@ -31,6 +32,7 @@ public class GameRenderer { private static final float CAMERA_SPEED = 72f; private static final float MAX_CAM_DISTANCE_FROM_PLAYER = 64f; + private final ApplicationContextRepository mApplicationContextRepository; private final GameContextRepository mGameContextRepository; private final MobController mMobsController; private final GameWorld mGameWorld; @@ -44,7 +46,8 @@ public class GameRenderer { private final SpriteBatch spriter; @Inject - public GameRenderer(GameContextRepository gameContextRepository, + public GameRenderer(ApplicationContextRepository applicationContextRepository, + GameContextRepository gameContextRepository, MobController mobsController, GameWorld gameWorld, Set renderers, @@ -62,6 +65,7 @@ public class GameRenderer { Gdx.app.error("GameRenderer", "Camera context was not set"); } + mApplicationContextRepository = applicationContextRepository; mGameContextRepository = gameContextRepository; mMobsController = mobsController; mGameWorld = gameWorld; @@ -99,10 +103,10 @@ public class GameRenderer { } private float getWidth() { - return mGameContextRepository.getWidth(); + return mApplicationContextRepository.getWidth(); } private float getHeight() { - return mGameContextRepository.getHeight(); + return mApplicationContextRepository.getHeight(); } private void setCamPos(float x, float y) { @@ -133,7 +137,7 @@ public class GameRenderer { float camTargetX, camTargetY; - boolean followPlayer = player.getControlMode() == Player.ControlMode.WALK || !mGameContextRepository.isTouch(); + boolean followPlayer = player.getControlMode() == Player.ControlMode.WALK || !mApplicationContextRepository.isTouch(); if (followPlayer) { camTargetX = plTargetX + Math.min(player.getVelocity().x * 2, getWidth() / 2); diff --git a/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/TouchControlsRenderer.kt b/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/TouchControlsRenderer.kt index 081caf2..8c81624 100644 --- a/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/TouchControlsRenderer.kt +++ b/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/TouchControlsRenderer.kt @@ -9,6 +9,7 @@ import ru.fredboy.cavedroid.common.model.Joystick import ru.fredboy.cavedroid.common.utils.drawSprite import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Player import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -20,6 +21,7 @@ import javax.inject.Inject @GameScope @BindRenderer class TouchControlsRenderer @Inject constructor( + private val applicationContextRepository: ApplicationContextRepository, private val gameContextRepository: GameContextRepository, private val mobController: MobController, private val gameWindowsManager: GameWindowsManager, @@ -35,7 +37,7 @@ class TouchControlsRenderer @Inject constructor( private val joyStick = Sprite(textureRegions["joy_stick"]) private fun drawJoystick(spriteBatch: SpriteBatch) { - val joystick = gameContextRepository.getJoystick()?.takeIf { it.active } ?: return + val joystick = gameContextRepository.getJoystick().takeIf { it.active } ?: return spriteBatch.drawSprite( sprite = joyBackground, @@ -55,7 +57,7 @@ class TouchControlsRenderer @Inject constructor( } override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) { - if (!gameContextRepository.isTouch() || gameWindowsManager.currentWindowType != GameWindowType.NONE) { + if (!applicationContextRepository.isTouch() || gameWindowsManager.currentWindowType != GameWindowType.NONE) { return } diff --git a/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/windows/SurvivalWindowRenderer.kt b/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/windows/SurvivalWindowRenderer.kt index 66ccdf6..8595fb5 100644 --- a/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/windows/SurvivalWindowRenderer.kt +++ b/core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/windows/SurvivalWindowRenderer.kt @@ -12,6 +12,7 @@ import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository import ru.fredboy.cavedroid.entity.mob.model.Direction import ru.fredboy.cavedroid.game.controller.mob.MobController @@ -23,7 +24,7 @@ import kotlin.math.atan @GameScope class SurvivalWindowRenderer @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val mobController: MobController, private val gameWindowsManager: GameWindowsManager, private val textureRegions: GetTextureRegionByNameUseCase, @@ -37,12 +38,12 @@ class SurvivalWindowRenderer @Inject constructor( private val survivalWindowTexture get() = requireNotNull(textureRegions[SURVIVAL_WINDOW_KEY]) private fun setPortraitHeadRotation(portraitX: Float, portraitY: Float) { - if (gameContextRepository.isTouch()) { + if (applicationContextRepository.isTouch()) { return } - val mouseX = Gdx.input.x * (gameContextRepository.getWidth() / Gdx.graphics.width) - val mouseY = Gdx.input.y * (gameContextRepository.getHeight() / Gdx.graphics.height) + val mouseX = Gdx.input.x * (applicationContextRepository.getWidth() / Gdx.graphics.width) + val mouseY = Gdx.input.y * (applicationContextRepository.getHeight() / Gdx.graphics.height) val h = mouseX.toDouble() - portraitX.toDouble() val v = mouseY.toDouble() - portraitY.toDouble() diff --git a/core/zygote/build.gradle.kts b/core/zygote/build.gradle.kts index 26490ee..d315c7f 100644 --- a/core/zygote/build.gradle.kts +++ b/core/zygote/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { useDagger() useCommonModule() + useDataModules() useDomainModules() useEntityModules() useGameModules() diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameProc.java b/core/zygote/src/main/java/ru/fredboy/cavedroid/zygote/game/GameProc.java similarity index 94% rename from core/src/main/java/ru/deadsoftware/cavedroid/game/GameProc.java rename to core/zygote/src/main/java/ru/fredboy/cavedroid/zygote/game/GameProc.java index db1d2f9..10a7293 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameProc.java +++ b/core/zygote/src/main/java/ru/fredboy/cavedroid/zygote/game/GameProc.java @@ -1,9 +1,9 @@ -package ru.deadsoftware.cavedroid.game; +package ru.fredboy.cavedroid.zygote.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Timer; -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository; +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository; import ru.fredboy.cavedroid.ux.controls.GameInputProcessor; import ru.fredboy.cavedroid.ux.physics.GamePhysics; import ru.fredboy.cavedroid.ux.physics.task.GameWorldBlocksLogicControllerTask; @@ -32,7 +32,7 @@ public class GameProc implements Disposable { private final Timer mWorldLogicTimer = new Timer(); @Inject - public GameProc(GameContextRepository gameContextRepository, + public GameProc(ApplicationContextRepository gameContextRepository, GamePhysics gamePhysics, GameRenderer gameRenderer, MobController mobsController, diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/CaveDroidApplication.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/CaveDroidApplication.kt new file mode 100644 index 0000000..0bbaa30 --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/CaveDroidApplication.kt @@ -0,0 +1,87 @@ +package ru.fredboy.cavedroid.zygote + +import com.badlogic.gdx.Application +import com.badlogic.gdx.Game +import com.badlogic.gdx.Gdx +import ru.fredboy.cavedroid.common.api.ApplicationController +import ru.fredboy.cavedroid.common.api.PreferencesStore +import ru.fredboy.cavedroid.common.utils.ratio +import ru.fredboy.cavedroid.data.configuration.model.ApplicationContext +import ru.fredboy.cavedroid.zygote.di.ApplicationComponent +import ru.fredboy.cavedroid.zygote.di.DaggerApplicationComponent +import ru.fredboy.cavedroid.zygote.game.GameScreen + +class CaveDroidApplication( + private val gameDataDirectoryPath: String, + private val isTouchScreen: Boolean, + private val isDebug: Boolean, + private val preferencesStore: PreferencesStore, +) : Game(), ApplicationController { + + lateinit var applicationComponent: ApplicationComponent + private set + + private fun newGame(gameMode: Int) { + setScreen(applicationComponent.gameScreen.apply { newGame(gameMode) }) + } + + override fun create() { + val width = DEFAULT_VIEWPORT_WIDTH + val height = width / Gdx.graphics.ratio + + applicationComponent = DaggerApplicationComponent.builder() + .applicationContext( + ApplicationContext( + isDebug = isDebug, + isTouch = isTouchScreen, + gameDirectory = gameDataDirectoryPath, + width = width, + height = height, + ) + ) + .applicationController(this) + .preferencesStore(preferencesStore) + .build() + + Gdx.app.logLevel = Application.LOG_DEBUG + + Gdx.files.absolute(gameDataDirectoryPath).mkdirs() + applicationComponent.initializeAssets() + setScreen(applicationComponent.menuScreen) + } + + override fun dispose() { + applicationComponent.menuScreen.dispose() + applicationComponent.gameScreen.dispose() + applicationComponent.disposeAssets() + } + + override fun quitGame() { + (screen as? GameScreen)?.let { gameScreen -> + screen.dispose() + setScreen(applicationComponent.menuScreen) + } ?: Gdx.app.error(TAG, "quitGame called when active screen is not Game") + } + + override fun newGameCreative() { + newGame(1) + } + + override fun newGameSurvival() { + newGame(0) + } + + override fun loadGame() { + setScreen(applicationComponent.gameScreen.apply { loadGame() }) + } + + override fun exitGame() { + setScreen(null) + Gdx.app.exit() + } + + companion object { + private const val TAG = "CaveDroidApplication" + private const val DEFAULT_VIEWPORT_WIDTH = 480f + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/di/ApplicationComponent.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/di/ApplicationComponent.kt new file mode 100644 index 0000000..134d39a --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/di/ApplicationComponent.kt @@ -0,0 +1,84 @@ +package ru.fredboy.cavedroid.zygote.di + +import dagger.BindsInstance +import dagger.Component +import ru.fredboy.cavedroid.common.api.ApplicationController +import ru.fredboy.cavedroid.common.api.PreferencesStore +import ru.fredboy.cavedroid.data.assets.di.DataAssetsModule +import ru.fredboy.cavedroid.data.configuration.di.ApplicationContextModule +import ru.fredboy.cavedroid.data.configuration.model.ApplicationContext +import ru.fredboy.cavedroid.data.items.di.DataItemsModule +import ru.fredboy.cavedroid.data.save.di.DataSaveModule +import ru.fredboy.cavedroid.domain.assets.repository.BlockAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.BlockDamageAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.FontAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.ItemsAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.TextureRegionsAssetsRepository +import ru.fredboy.cavedroid.domain.assets.repository.TouchButtonsAssetsRepository +import ru.fredboy.cavedroid.domain.assets.usecase.DisposeAssetsUseCase +import ru.fredboy.cavedroid.domain.assets.usecase.InitializeAssetsUseCase +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository +import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository +import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository +import ru.fredboy.cavedroid.zygote.game.GameScreen +import ru.fredboy.cavedroid.zygote.menu.MenuScreen +import javax.inject.Singleton + +@Singleton +@Component( + modules = [ + DataAssetsModule::class, + DataItemsModule::class, + DataSaveModule::class, + ApplicationContextModule::class, + ] +) +interface ApplicationComponent { + + val initializeAssets: InitializeAssetsUseCase + + val disposeAssets: DisposeAssetsUseCase + + val gameScreen: GameScreen + + val menuScreen: MenuScreen + + val applicationContextRepository: ApplicationContextRepository + + val blockAssetsRepository: BlockAssetsRepository + + val blockDamageAssetsRepository: BlockDamageAssetsRepository + + val fontAssetsRepository: FontAssetsRepository + + val mobAssetsRepository: MobAssetsRepository + + val itemAssetsRepository: ItemsAssetsRepository + + val textureRegionsAssetsRepository: TextureRegionsAssetsRepository + + val touchButtonsAssetsRepository: TouchButtonsAssetsRepository + + val itemsRepository: ItemsRepository + + val saveDataRepository: SaveDataRepository + + val applicationController: ApplicationController + + @Component.Builder + interface Builder { + + @BindsInstance + fun applicationContext(context: ApplicationContext): Builder + + @BindsInstance + fun applicationController(impl: ApplicationController): Builder + + @BindsInstance + fun preferencesStore(impl: PreferencesStore): Builder + + fun build(): ApplicationComponent + + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/GameScreen.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/GameScreen.kt new file mode 100644 index 0000000..4c02ceb --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/GameScreen.kt @@ -0,0 +1,110 @@ +package ru.fredboy.cavedroid.zygote.game + +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.Screen +import com.badlogic.gdx.graphics.OrthographicCamera +import com.badlogic.gdx.math.Rectangle +import ru.fredboy.cavedroid.common.model.Joystick +import ru.fredboy.cavedroid.data.configuration.model.GameContext +import ru.fredboy.cavedroid.domain.configuration.model.CameraContext +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository +import ru.fredboy.cavedroid.entity.mob.model.Player +import ru.fredboy.cavedroid.zygote.CaveDroidApplication +import ru.fredboy.cavedroid.zygote.game.di.DaggerGameComponent +import ru.fredboy.cavedroid.zygote.game.di.GameComponent +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class GameScreen @Inject constructor( + private val applicationContextRepository: ApplicationContextRepository, +) : Screen { + + private var gameProc: GameProc? = null + + private fun getGameContext(isLoadGame: Boolean): GameContext { + return GameContext( + isLoadGame = isLoadGame, + showInfo = false, + showMap = false, + isFullscreen = false, + useDynamicCamera = false, + joystick = Joystick(Player.SPEED), + cameraContext = CameraContext( + viewport = Rectangle( + /* x = */ 0f, + /* y = */ 0f, + /* width = */ applicationContextRepository.getWidth(), + /* height = */ applicationContextRepository.getHeight(), + ), + camera = OrthographicCamera().apply { + setToOrtho( + /* yDown = */ true, + /* viewportWidth = */ applicationContextRepository.getWidth(), + /* viewportHeight = */ applicationContextRepository.getHeight(), + ) + } + ) + ) + } + + private fun getGameComponent(isLoadGame: Boolean): GameComponent { + val gameContext = getGameContext(isLoadGame) + + return DaggerGameComponent.builder() + .applicationComponent((Gdx.app.applicationListener as CaveDroidApplication).applicationComponent) + .gameContext(gameContext) + .build() + } + + private fun resetGameProc() { + gameProc?.dispose() + gameProc = null + } + + fun newGame(gameMode: Int) { + resetGameProc() + gameProc = getGameComponent(false).gameProc.apply { + setPlayerGameMode(gameMode) + } + } + + fun loadGame() { + resetGameProc() + gameProc = getGameComponent(true).gameProc + } + + override fun show() { + val proc = requireNotNull(gameProc) { + "GameScreen#show: gameProc was not set before show" + } + proc.show() + } + + override fun render(delta: Float) { + val proc = requireNotNull(gameProc) { + "GameScreen#render: gameProc was not set before render" + } + proc.update(delta) + } + + override fun resize(width: Int, height: Int) { + + } + + override fun pause() { + + } + + override fun resume() { + + } + + override fun hide() { + + } + + override fun dispose() { + resetGameProc() + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameComponent.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameComponent.kt new file mode 100644 index 0000000..4dd9f87 --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameComponent.kt @@ -0,0 +1,47 @@ +package ru.fredboy.cavedroid.zygote.game.di + +import dagger.BindsInstance +import dagger.Component +import ru.deadsoftware.cavedroid.generated.module.* +import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.data.configuration.di.GameContextModule +import ru.fredboy.cavedroid.data.configuration.model.GameContext +import ru.fredboy.cavedroid.game.controller.container.di.ControllerContainerModule +import ru.fredboy.cavedroid.game.controller.drop.di.ControllerDropModule +import ru.fredboy.cavedroid.game.world.di.GameWorldModule +import ru.fredboy.cavedroid.zygote.di.ApplicationComponent +import ru.fredboy.cavedroid.zygote.game.GameProc + +@GameScope +@Component( + dependencies = [ ApplicationComponent::class ], + modules = [ + GameModule::class, + UseItemActionsModule::class, + UpdateBlockActionsModule::class, + PlaceBlockActionsModule::class, + RenderModule::class, + KeyboardInputHandlersModule::class, + MouseInputHandlersModule::class, + UseBlockActionsModule::class, + GameWorldModule::class, + ControllerContainerModule::class, + ControllerDropModule::class, + GameContextModule::class, + ] +) +interface GameComponent { + + val gameProc: GameProc + + @Component.Builder + interface Builder { + + fun applicationComponent(component: ApplicationComponent): Builder + + @BindsInstance + fun gameContext(context: GameContext): Builder + + fun build(): GameComponent + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameModule.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameModule.kt new file mode 100644 index 0000000..7744085 --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/game/di/GameModule.kt @@ -0,0 +1,122 @@ +package ru.fredboy.cavedroid.zygote.game.di + +import dagger.Module +import dagger.Provides +import ru.fredboy.cavedroid.common.di.GameScope +import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository +import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository +import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository +import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase +import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase +import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository +import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory +import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter +import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter +import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter +import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter +import ru.fredboy.cavedroid.game.controller.container.ContainerController +import ru.fredboy.cavedroid.game.controller.drop.DropController +import ru.fredboy.cavedroid.game.controller.mob.MobController +import ru.fredboy.cavedroid.game.world.GameWorld + +@Module +object GameModule { + + @Provides + @GameScope + fun provideDropController( + applicationContextRepository: ApplicationContextRepository, + gameContextRepository: GameContextRepository, + saveDataRepository: SaveDataRepository, + itemsRepository: ItemsRepository, + dropWorldAdapter: DropWorldAdapter, + ): DropController { + return if (gameContextRepository.isLoadGame()) { + saveDataRepository.loadDropController( + gameDataFolder = applicationContextRepository.getGameDirectory(), + dropWorldAdapter = dropWorldAdapter, + ) + } else { + DropController( + itemsRepository = itemsRepository, + dropWorldAdapter = dropWorldAdapter, + ) + } + } + + @Provides + @GameScope + fun provideContainerController( + applicationContextRepository: ApplicationContextRepository, + gameContextRepository: GameContextRepository, + saveDataRepository: SaveDataRepository, + getItemByKeyUseCase: GetItemByKeyUseCase, + containerWorldAdapter: ContainerWorldAdapter, + containerFactory: ContainerFactory, + dropAdapter: DropAdapter, + ): ContainerController { + return if (gameContextRepository.isLoadGame()) { + saveDataRepository.loadContainerController( + gameDataFolder = applicationContextRepository.getGameDirectory(), + containerWorldAdapter = containerWorldAdapter, + containerFactory = containerFactory, + dropAdapter = dropAdapter, + ) + } else { + ContainerController( + getItemByKeyUseCase = getItemByKeyUseCase, + containerWorldAdapter = containerWorldAdapter, + containerFactory = containerFactory, + dropAdapter = dropAdapter, + ) + } + } + + @Provides + @GameScope + fun provideMobController( + applicationContextRepository: ApplicationContextRepository, + gameContextRepository: GameContextRepository, + saveDataRepository: SaveDataRepository, + mobAssetsRepository: MobAssetsRepository, + getFallbackItemUseCase: GetFallbackItemUseCase, + mobWorldAdapter: MobWorldAdapter, + ): MobController { + return if (gameContextRepository.isLoadGame()) { + saveDataRepository.loadMobController( + gameDataFolder = applicationContextRepository.getGameDirectory(), + mobWorldAdapter = mobWorldAdapter, + ) + } else { + MobController( + mobAssetsRepository = mobAssetsRepository, + getFallbackItemUseCase = getFallbackItemUseCase, + mobWorldAdapter = mobWorldAdapter, + ) + } + } + + @Provides + @GameScope + fun provideGameWorld( + applicationContextRepository: ApplicationContextRepository, + gameContextRepository: GameContextRepository, + saveDataRepository: SaveDataRepository, + itemsRepository: ItemsRepository, + ): GameWorld { + val mapData = if (gameContextRepository.isLoadGame()) { + saveDataRepository.loadMap( + gameDataFolder = applicationContextRepository.getGameDirectory(), + ) + } else { + null + } + + return GameWorld( + itemsRepository = itemsRepository, + initialForeMap = mapData?.retrieveForeMap(), + initialBackMap = mapData?.retrieveBackMap(), + ) + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/MenuScreen.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/MenuScreen.kt new file mode 100644 index 0000000..6bc03e5 --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/MenuScreen.kt @@ -0,0 +1,61 @@ +package ru.fredboy.cavedroid.zygote.menu + +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.Screen +import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository +import ru.fredboy.cavedroid.zygote.CaveDroidApplication +import ru.fredboy.cavedroid.zygote.menu.di.DaggerMenuComponent +import ru.fredboy.cavedroid.zygote.menu.di.MenuComponent +import ru.fredboy.cavedroid.zygote.menu.input.MenuInputProcessor +import ru.fredboy.cavedroid.zygote.menu.renderer.MenuRenderer +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class MenuScreen @Inject constructor() : Screen { + + private val menuRenderer: MenuRenderer + + private val menuInputProcessor: MenuInputProcessor + + private val menuButtonRepository: MenuButtonRepository + + init { + val menuComponent: MenuComponent = DaggerMenuComponent.builder() + .applicationComponent((Gdx.app.applicationListener as CaveDroidApplication).applicationComponent) + .build() + + menuRenderer = menuComponent.menuRenderer + menuInputProcessor = menuComponent.menuInputProcessor + menuButtonRepository = menuComponent.menuButtonRepository + } + + fun resetMenu() { + menuButtonRepository.setCurrentMenu("main") + } + + override fun show() { + Gdx.input.inputProcessor = menuInputProcessor + } + + override fun render(delta: Float) { + menuRenderer.render(delta) + } + + override fun resize(width: Int, height: Int) { + } + + override fun pause() { + } + + override fun resume() { + } + + override fun hide() { + } + + override fun dispose() { + menuRenderer.dispose() + menuButtonRepository.dispose() + } +} \ No newline at end of file diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/ExitGameAction.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/ExitGameAction.kt index c84556c..6a5bb9d 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/ExitGameAction.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/ExitGameAction.kt @@ -1,6 +1,6 @@ package ru.fredboy.cavedroid.zygote.menu.action -import ru.fredboy.cavedroid.common.api.GameController +import ru.fredboy.cavedroid.common.api.ApplicationController import ru.fredboy.cavedroid.common.di.MenuScope import ru.fredboy.cavedroid.zygote.menu.action.annotation.BindsMenuAction import javax.inject.Inject @@ -8,7 +8,7 @@ import javax.inject.Inject @MenuScope @BindsMenuAction(stringKey = ExitGameAction.KEY) class ExitGameAction @Inject constructor( - private val gameController: GameController, + private val gameController: ApplicationController, ) : IMenuAction { override fun perform() { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/LoadGameAction.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/LoadGameAction.kt index 52d3411..9277714 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/LoadGameAction.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/LoadGameAction.kt @@ -1,8 +1,8 @@ package ru.fredboy.cavedroid.zygote.menu.action -import ru.fredboy.cavedroid.common.api.GameController +import ru.fredboy.cavedroid.common.api.ApplicationController import ru.fredboy.cavedroid.common.di.MenuScope -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository import ru.fredboy.cavedroid.zygote.menu.action.annotation.BindsMenuAction import javax.inject.Inject @@ -10,9 +10,9 @@ import javax.inject.Inject @MenuScope @BindsMenuAction(stringKey = LoadGameAction.KEY) class LoadGameAction @Inject constructor( - private val gameController: GameController, + private val applicationContextRepository: ApplicationContextRepository, + private val gameController: ApplicationController, private val saveDataRepository: SaveDataRepository, - private val gameContextRepository: GameContextRepository, ) : IMenuAction { override fun perform() { @@ -20,7 +20,7 @@ class LoadGameAction @Inject constructor( } override fun canPerform(): Boolean { - return saveDataRepository.exists(gameContextRepository.getGameDirectory()) + return saveDataRepository.exists(applicationContextRepository.getGameDirectory()) } companion object { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameCreativeAction.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameCreativeAction.kt index 5e309b4..9cbbfc9 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameCreativeAction.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameCreativeAction.kt @@ -1,6 +1,6 @@ package ru.fredboy.cavedroid.zygote.menu.action -import ru.fredboy.cavedroid.common.api.GameController +import ru.fredboy.cavedroid.common.api.ApplicationController import ru.fredboy.cavedroid.common.di.MenuScope import ru.fredboy.cavedroid.zygote.menu.action.annotation.BindsMenuAction import javax.inject.Inject @@ -8,7 +8,7 @@ import javax.inject.Inject @MenuScope @BindsMenuAction(stringKey = NewGameCreativeAction.KEY) class NewGameCreativeAction @Inject constructor( - private val gameController: GameController, + private val gameController: ApplicationController, ) : IMenuAction { override fun perform() { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameSurvivalAction.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameSurvivalAction.kt index 13890bd..15fdd90 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameSurvivalAction.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/action/NewGameSurvivalAction.kt @@ -1,6 +1,6 @@ package ru.fredboy.cavedroid.zygote.menu.action -import ru.fredboy.cavedroid.common.api.GameController +import ru.fredboy.cavedroid.common.api.ApplicationController import ru.fredboy.cavedroid.common.di.MenuScope import ru.fredboy.cavedroid.zygote.menu.action.annotation.BindsMenuAction import javax.inject.Inject @@ -8,7 +8,7 @@ import javax.inject.Inject @MenuScope @BindsMenuAction(stringKey = NewGameSurvivalAction.KEY) class NewGameSurvivalAction @Inject constructor( - private val gameController: GameController, + private val gameController: ApplicationController, ) : IMenuAction { override fun perform() { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/di/MenuComponent.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/di/MenuComponent.kt new file mode 100644 index 0000000..81c87eb --- /dev/null +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/di/MenuComponent.kt @@ -0,0 +1,37 @@ +package ru.fredboy.cavedroid.zygote.menu.di + +import dagger.Component +import ru.deadsoftware.cavedroid.generated.module.MenuActionsModule +import ru.deadsoftware.cavedroid.generated.module.MenuBooleanOptionsModule +import ru.fredboy.cavedroid.common.di.MenuScope +import ru.fredboy.cavedroid.data.menu.di.DataMenuModule +import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository +import ru.fredboy.cavedroid.zygote.di.ApplicationComponent +import ru.fredboy.cavedroid.zygote.menu.input.MenuInputProcessor +import ru.fredboy.cavedroid.zygote.menu.renderer.MenuRenderer + +@MenuScope +@Component( + dependencies = [ ApplicationComponent::class ], + modules = [ + DataMenuModule::class, + MenuBooleanOptionsModule::class, + MenuActionsModule::class, + ] +) +interface MenuComponent { + + val menuRenderer: MenuRenderer + + val menuInputProcessor: MenuInputProcessor + + val menuButtonRepository: MenuButtonRepository + + @Component.Builder + interface Builder { + + fun applicationComponent(impl: ApplicationComponent): Builder + + fun build(): MenuComponent + } +} diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/input/MenuInputProcessor.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/input/MenuInputProcessor.kt index b78bc21..2c80a40 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/input/MenuInputProcessor.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/input/MenuInputProcessor.kt @@ -4,7 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.InputProcessor import com.badlogic.gdx.math.Rectangle import ru.fredboy.cavedroid.common.di.MenuScope -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.menu.model.MenuButton import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository import ru.fredboy.cavedroid.zygote.menu.action.IMenuAction @@ -13,7 +13,7 @@ import javax.inject.Inject @MenuScope class MenuInputProcessor @Inject constructor( - private val gameContextRepository: GameContextRepository, + private val applicationContextRepository: ApplicationContextRepository, private val menuButtonRepository: MenuButtonRepository, private val menuButtonActions: Map, private val menuButtonBooleanOption: Map, @@ -25,9 +25,8 @@ class MenuInputProcessor @Inject constructor( pointer: Int, button: Int ): Boolean { - val cameraContext = gameContextRepository.getCameraContext() ?: return false - - val (touchX, touchY) = cameraContext.getViewportCoordinates(screenX, screenY) + val touchX = applicationContextRepository.getWidth() / Gdx.graphics.width * screenX.toFloat() + val touchY = applicationContextRepository.getHeight() / Gdx.graphics.height * screenY.toFloat() menuButtonRepository.getCurrentMenuButtons()?.values?.forEachIndexed { index, button -> if (!button.isEnabled) { @@ -36,8 +35,8 @@ class MenuInputProcessor @Inject constructor( // TODO: Fix magic numbers val rect = Rectangle( - /* x = */ gameContextRepository.getWidth() / 2 - 100, - /* y = */ gameContextRepository.getHeight() / 4 + index * 30, + /* x = */ applicationContextRepository.getWidth() / 2 - 100, + /* y = */ applicationContextRepository.getHeight() / 4 + index * 30, /* width = */ 200f, /* height = */ 20f ) diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/DynamicCameraMenuBooleanOption.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/DynamicCameraMenuBooleanOption.kt index 2a137f2..6de8ace 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/DynamicCameraMenuBooleanOption.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/DynamicCameraMenuBooleanOption.kt @@ -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.GameContextRepository 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 gameContextRepository: GameContextRepository, ) : IMenuBooleanOption { override fun getOption(): Boolean { - return gameContextRepository.useDynamicCamera() + return false +// return gameContextRepository.useDynamicCamera() } override fun toggleOption() { - gameContextRepository.setUseDynamicCamera(!getOption()) +// gameContextRepository.setUseDynamicCamera(!getOption()) } companion object { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/FullscreenMenuBooleanOption.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/FullscreenMenuBooleanOption.kt index 3036ee0..1e73e1d 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/FullscreenMenuBooleanOption.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/option/bool/FullscreenMenuBooleanOption.kt @@ -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.GameContextRepository 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 gameContextRepository: GameContextRepository, ) : IMenuBooleanOption { override fun getOption(): Boolean { - return gameContextRepository.isFullscreen() + return false +// return gameContextRepository.isFullscreen() } override fun toggleOption() { - gameContextRepository.setFullscreen(!getOption()) +// gameContextRepository.setFullscreen(!getOption()) } companion object { diff --git a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/renderer/MenuRenderer.kt b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/renderer/MenuRenderer.kt index 6d36e45..6c7fdd0 100644 --- a/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/renderer/MenuRenderer.kt +++ b/core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/menu/renderer/MenuRenderer.kt @@ -1,6 +1,7 @@ package ru.fredboy.cavedroid.zygote.menu.renderer import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.math.Rectangle import ru.fredboy.cavedroid.common.CaveDroidConstants @@ -10,7 +11,7 @@ import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase -import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository +import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository import ru.fredboy.cavedroid.domain.menu.model.MenuButton import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository import ru.fredboy.cavedroid.zygote.menu.action.IMenuAction @@ -19,8 +20,8 @@ import javax.inject.Inject @MenuScope class MenuRenderer @Inject constructor( + private val applicationContextRepository: ApplicationContextRepository, private val menuButtonRepository: MenuButtonRepository, - private val gameContextRepository: GameContextRepository, private val getTextureRegionByName: GetTextureRegionByNameUseCase, private val menuButtonActions: Map, private val buttonBooleanOptions: Map, @@ -28,14 +29,19 @@ class MenuRenderer @Inject constructor( private val getStringWidth: GetStringWidthUseCase, private val getStringHeight: GetStringHeightUseCase, ) { + + private val camera = OrthographicCamera() + private val spriter = SpriteBatch() init { - val cameraContext = requireNotNull(gameContextRepository.getCameraContext()) { - "$TAG: CameraContext was not set" - } + camera.setToOrtho( + /* yDown = */ true, + /* viewportWidth = */ applicationContextRepository.getWidth(), + /* viewportHeight = */ applicationContextRepository.getHeight(), + ) - spriter.projectionMatrix = cameraContext.camera.combined + spriter.projectionMatrix = camera.combined } private fun getButtonTextureRegionKey(button: MenuButton): String { @@ -62,8 +68,8 @@ class MenuRenderer @Inject constructor( ) } - val buttonX = gameContextRepository.getWidth() / 2 - textureRegion.regionWidth / 2 - val buttonY = gameContextRepository.getHeight() / 4 + position.toFloat() * 30 + val buttonX = applicationContextRepository.getWidth() / 2 - textureRegion.regionWidth / 2 + val buttonY = applicationContextRepository.getHeight() / 4 + position.toFloat() * 30 val buttonRect = Rectangle( /* x = */ buttonX, @@ -72,17 +78,11 @@ class MenuRenderer @Inject constructor( /* height = */ textureRegion.regionHeight.toFloat(), ) - val inputCoordinates = gameContextRepository.getCameraContext()?.getViewportCoordinates( - x = Gdx.input.x, - y = Gdx.input.y, - ) + val inputX = applicationContextRepository.getWidth() / Gdx.graphics.width * Gdx.input.x.toFloat() + val inputY = applicationContextRepository.getHeight() / Gdx.graphics.height * Gdx.input.y.toFloat() spriter.draw( - if (button.isEnabled && inputCoordinates != null && buttonRect.contains( - /* x = */ inputCoordinates.first, - /* y = */ inputCoordinates.second - ) - ) { + if (button.isEnabled && buttonRect.contains(inputX, inputY)) { getTextureRegionByName[KEY_BUTTON_SELECTED_TEXTURE] ?: textureRegion } else { textureRegion @@ -106,8 +106,8 @@ class MenuRenderer @Inject constructor( val backgroundRegionWidth = backgroundRegion.regionWidth val backgroundRegionHeight = backgroundRegion.regionWidth - for (x in 0 .. gameContextRepository.getWidth().toInt() / backgroundRegionWidth) { - for (y in 0 .. gameContextRepository.getHeight().toInt() / backgroundRegionHeight) { + for (x in 0 .. applicationContextRepository.getWidth().toInt() / backgroundRegionWidth) { + for (y in 0 .. applicationContextRepository.getHeight().toInt() / backgroundRegionHeight) { spriter.draw( /* region = */ backgroundRegion, /* x = */ x * backgroundRegionWidth.toFloat(), @@ -118,7 +118,7 @@ class MenuRenderer @Inject constructor( spriter.draw( /* region = */ gameLogo, - /* x = */ gameContextRepository.getWidth() / 2 - gameLogo.regionWidth.toFloat() / 2, + /* x = */ applicationContextRepository.getWidth() / 2 - gameLogo.regionWidth.toFloat() / 2, /* y = */ 8f, ) } @@ -134,7 +134,7 @@ class MenuRenderer @Inject constructor( font = getFont(), str = "CaveDroid " + CaveDroidConstants.VERSION, x = 0f, - y = gameContextRepository.getHeight() - getStringHeight("CaveDroid " + CaveDroidConstants.VERSION) * 1.5f, + y = applicationContextRepository.getHeight() - getStringHeight("CaveDroid " + CaveDroidConstants.VERSION) * 1.5f, ); spriter.end() diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index dd418a0..910d67e 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -39,7 +39,7 @@ tasks.register("dist") { dependencies { useCommonModule() - implementation(project(":core")) + useZygoteModule() implementation(Dependencies.LibGDX.gdx) implementation(Dependencies.LibGDX.Desktop.backend) diff --git a/desktop/src/main/kotlin/ru/deadsoftware/cavedroid/desktop/DesktopLauncher.kt b/desktop/src/main/kotlin/ru/deadsoftware/cavedroid/desktop/DesktopLauncher.kt index b4b3db4..55eeb34 100644 --- a/desktop/src/main/kotlin/ru/deadsoftware/cavedroid/desktop/DesktopLauncher.kt +++ b/desktop/src/main/kotlin/ru/deadsoftware/cavedroid/desktop/DesktopLauncher.kt @@ -3,7 +3,7 @@ package ru.deadsoftware.cavedroid.desktop import com.badlogic.gdx.Files import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration -import ru.deadsoftware.cavedroid.CaveGame +import ru.fredboy.cavedroid.zygote.CaveDroidApplication internal object DesktopLauncher { @@ -42,7 +42,7 @@ internal object DesktopLauncher { } } - val caveGame = CaveGame( + val caveGame = CaveDroidApplication( gameDataDirectoryPath = System.getProperty("user.home") + "/.cavedroid", isTouchScreen = touch, isDebug = debug, diff --git a/settings.gradle.kts b/settings.gradle.kts index f38be29..189baaf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,5 @@ include("android") include("desktop") -include("core") /** * Global modules -- 2.29.2