DEADSOFTWARE

29702aece89cc3d9fcec5f0b87f429d0de239062
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / TouchControlsRenderer.kt
1 package ru.deadsoftware.cavedroid.game.render
3 import com.badlogic.gdx.graphics.g2d.SpriteBatch
4 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
5 import com.badlogic.gdx.math.Rectangle
6 import ru.deadsoftware.cavedroid.MainConfig
7 import ru.deadsoftware.cavedroid.game.GameScope
8 import ru.deadsoftware.cavedroid.game.GameUiWindow
9 import ru.deadsoftware.cavedroid.game.input.Joystick
10 import ru.deadsoftware.cavedroid.game.mobs.MobsController
11 import ru.deadsoftware.cavedroid.game.mobs.player.Player.ControlMode
12 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
13 import ru.deadsoftware.cavedroid.misc.Assets
14 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component1
15 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component2
16 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
17 import javax.inject.Inject
19 @GameScope
20 @GameRenderer
21 class TouchControlsRenderer @Inject constructor(
22 private val mainConfig: MainConfig,
23 private val mobsController: MobsController,
24 private val gameWindowsManager: GameWindowsManager,
25 ) : IGameRenderer {
27 override val renderLayer get() = RENDER_LAYER
29 private val shadeTexture get() = Assets.textureRegions[SHADE_KEY]
31 private fun drawJoystick(spriteBatch: SpriteBatch) {
32 val joystick = mainConfig.joystick?.takeIf { it.active } ?: return
34 spriteBatch.drawSprite(
35 sprite = Assets.joyBackground,
36 x = joystick.centerX - Joystick.RADIUS,
37 y = joystick.centerY - Joystick.RADIUS,
38 width = Joystick.SIZE,
39 height = Joystick.SIZE
40 )
42 spriteBatch.drawSprite(
43 sprite = Assets.joyStick,
44 x = joystick.activeX - Joystick.STICK_SIZE / 2,
45 y = joystick.activeY - Joystick.STICK_SIZE / 2,
46 width = Joystick.STICK_SIZE,
47 height = Joystick.STICK_SIZE
48 )
49 }
51 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
52 if (!mainConfig.isTouch || gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE) {
53 return
54 }
56 val touchControlsMap = Assets.guiMap
58 touchControlsMap.forEach { (key, value) ->
59 val touchKey = value.rect
60 spriteBatch.draw(
61 /* region = */ Assets.textureRegions[key],
62 /* x = */ touchKey.x,
63 /* y = */ touchKey.y,
64 /* width = */ touchKey.width,
65 /* height = */ touchKey.height
66 )
67 }
69 // FIXME: Add pressed state for buttons
70 if (mobsController.player.controlMode == ControlMode.CURSOR) {
71 val altKeyRect = touchControlsMap.get("alt").rect
72 spriteBatch.draw(shadeTexture, altKeyRect.x, altKeyRect.y, altKeyRect.width, altKeyRect.height)
73 }
75 drawJoystick(spriteBatch)
76 }
78 companion object {
79 private const val RENDER_LAYER = 100700
81 private const val SHADE_KEY = "shade"
82 }
84 }