}
override fun setFullscreen(fullscreen: Boolean) {
- if (Gdx.app.type != Application.ApplicationType.Desktop) {
+ if (!Gdx.graphics.supportsDisplayModeChange()) {
return
}
if (fullscreen) {
Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode);
} else {
- Gdx.graphics.setWindowedMode(2 * getWidth().toInt(), 2 * getHeight().toInt())
+ Gdx.graphics.setWindowedMode(960, 540)
+ setWidth(Gdx.graphics.width.toFloat() / 2)
+ setHeight(Gdx.graphics.height.toFloat() / 2)
}
applicationContextStore.isFullscreen = fullscreen
}
package ru.fredboy.cavedroid.domain.configuration.model
import com.badlogic.gdx.Gdx
-import com.badlogic.gdx.graphics.Camera
+import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.math.Rectangle
data class CameraContext(
val viewport: Rectangle,
- val camera: Camera,
+ val camera: OrthographicCamera,
) {
fun xOnViewport(x: Int) = viewport.width / Gdx.graphics.width * x.toFloat()
}
}
+ public void onResize() {
+ spriter.setProjectionMatrix(mGameContextRepository.getCameraContext().getCamera().combined);
+ shaper.setProjectionMatrix(mGameContextRepository.getCameraContext().getCamera().combined);
+ }
+
public void render(float delta) {
updateCameraPosition(delta);
mContainerController.update(delta);
}
+ public void onResize() {
+ mGameRenderer.onResize();
+ }
+
public void show() {
Gdx.input.setInputProcessor(mGameInputProcessor);
}
--- /dev/null
+package ru.fredboy.cavedroid.zygote.base
+
+import com.badlogic.gdx.Screen
+import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
+
+abstract class BaseScreen(
+ private val applicationContextRepository: ApplicationContextRepository,
+) : Screen {
+
+ override fun resize(width: Int, height: Int) {
+ applicationContextRepository.setWidth(width.toFloat() / 2)
+ applicationContextRepository.setHeight(height.toFloat() / 2)
+ }
+
+}
\ No newline at end of file
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.domain.configuration.repository.ApplicationContextRepository
import ru.fredboy.cavedroid.entity.mob.model.Player
import ru.fredboy.cavedroid.zygote.CaveDroidApplication
+import ru.fredboy.cavedroid.zygote.base.BaseScreen
import ru.fredboy.cavedroid.zygote.game.di.DaggerGameComponent
import ru.fredboy.cavedroid.zygote.game.di.GameComponent
import javax.inject.Inject
@Singleton
class GameScreen @Inject constructor(
private val applicationContextRepository: ApplicationContextRepository,
-) : Screen {
+) : BaseScreen(applicationContextRepository) {
- private var gameProc: GameProc? = null
+ private var gameComponent: GameComponent? = null
private fun getGameContext(isLoadGame: Boolean): GameContext {
return GameContext(
.build()
}
- private fun resetGameProc() {
- gameProc?.dispose()
- gameProc = null
+ private fun resetGameComponent() {
+ gameComponent?.gameProc?.dispose()
+ gameComponent = null
}
fun newGame(gameMode: Int) {
- resetGameProc()
- gameProc = getGameComponent(false).gameProc.apply {
- setPlayerGameMode(gameMode)
+ resetGameComponent()
+ gameComponent = getGameComponent(false).apply {
+ gameProc.setPlayerGameMode(gameMode)
}
}
fun loadGame() {
- resetGameProc()
- gameProc = getGameComponent(true).gameProc
+ resetGameComponent()
+ gameComponent = getGameComponent(true)
}
override fun show() {
- val proc = requireNotNull(gameProc) {
- "GameScreen#show: gameProc was not set before show"
+ val proc = requireNotNull(gameComponent?.gameProc) {
+ "GameScreen#show: gameComponent was not set before show"
}
proc.show()
}
override fun render(delta: Float) {
- val proc = requireNotNull(gameProc) {
- "GameScreen#render: gameProc was not set before render"
+ val proc = requireNotNull(gameComponent?.gameProc) {
+ "GameScreen#render: gameComponent was not set before render"
}
proc.update(delta)
}
override fun resize(width: Int, height: Int) {
+ super.resize(width, height)
+
+ gameComponent?.gameContextRepository?.getCameraContext()?.let { cameraContext ->
+ cameraContext.viewport.apply {
+ setWidth(applicationContextRepository.getWidth())
+ setHeight(applicationContextRepository.getHeight())
+ }
+ cameraContext.camera.setToOrtho(
+ /* yDown = */ true,
+ /* viewportWidth = */ applicationContextRepository.getWidth(),
+ /* viewportHeight = */ applicationContextRepository.getHeight(),
+ )
+ }
+ gameComponent?.gameProc?.onResize()
}
override fun pause() {
}
override fun dispose() {
- resetGameProc()
+ resetGameComponent()
}
}
\ No newline at end of file
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.domain.configuration.repository.GameContextRepository
import ru.fredboy.cavedroid.game.controller.container.di.ControllerContainerModule
import ru.fredboy.cavedroid.game.controller.drop.di.ControllerDropModule
import ru.fredboy.cavedroid.game.controller.mob.di.MobControllerModule
val gameProc: GameProc
+ val gameContextRepository: GameContextRepository
+
@Component.Builder
interface Builder {
package ru.fredboy.cavedroid.zygote.menu
import com.badlogic.gdx.Gdx
-import com.badlogic.gdx.Screen
+import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
import ru.fredboy.cavedroid.domain.menu.repository.MenuButtonRepository
import ru.fredboy.cavedroid.zygote.CaveDroidApplication
+import ru.fredboy.cavedroid.zygote.base.BaseScreen
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 javax.inject.Singleton
@Singleton
-class MenuScreen @Inject constructor() : Screen {
+class MenuScreen @Inject constructor(
+ applicationContextRepository: ApplicationContextRepository,
+) : BaseScreen(applicationContextRepository) {
private val menuRenderer: MenuRenderer
}
override fun resize(width: Int, height: Int) {
+ super.resize(width, height)
+ menuRenderer.onResize()
}
override fun pause() {
)
}
+ fun onResize() {
+ camera.setToOrtho(
+ /* yDown = */ true,
+ /* viewportWidth = */ applicationContextRepository.getWidth(),
+ /* viewportHeight = */ applicationContextRepository.getHeight(),
+ )
+ spriter.projectionMatrix = camera.combined
+ }
+
fun render(delta: Float) {
spriter.begin()
drawBackground()