DEADSOFTWARE

Update version script
[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.annotations.multibinding.BindRenderer
15 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component1
16 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component2
17 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
18 import javax.inject.Inject
20 @GameScope
21 @BindRenderer
22 class TouchControlsRenderer @Inject constructor(
23 private val mainConfig: MainConfig,
24 private val mobsController: MobsController,
25 private val gameWindowsManager: GameWindowsManager,
26 ) : IGameRenderer {
28 override val renderLayer get() = RENDER_LAYER
30 private val shadeTexture get() = Assets.textureRegions[SHADE_KEY]
32 private fun drawJoystick(spriteBatch: SpriteBatch) {
33 val joystick = mainConfig.joystick?.takeIf { it.active } ?: return
35 spriteBatch.drawSprite(
36 sprite = Assets.joyBackground,
37 x = joystick.centerX - Joystick.RADIUS,
38 y = joystick.centerY - Joystick.RADIUS,
39 width = Joystick.SIZE,
40 height = Joystick.SIZE
41 )
43 spriteBatch.drawSprite(
44 sprite = Assets.joyStick,
45 x = joystick.activeX - Joystick.STICK_SIZE / 2,
46 y = joystick.activeY - Joystick.STICK_SIZE / 2,
47 width = Joystick.STICK_SIZE,
48 height = Joystick.STICK_SIZE
49 )
50 }
52 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
53 if (!mainConfig.isTouch || gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE) {
54 return
55 }
57 val touchControlsMap = Assets.guiMap
59 touchControlsMap.forEach { (key, value) ->
60 val touchKey = value.rect
61 spriteBatch.draw(
62 /* region = */ Assets.textureRegions[key],
63 /* x = */ touchKey.x,
64 /* y = */ touchKey.y,
65 /* width = */ touchKey.width,
66 /* height = */ touchKey.height
67 )
68 }
70 // FIXME: Add pressed state for buttons
71 if (mobsController.player.controlMode == ControlMode.CURSOR) {
72 val altKeyRect = touchControlsMap.get("alt").rect
73 spriteBatch.draw(shadeTexture, altKeyRect.x, altKeyRect.y, altKeyRect.width, altKeyRect.height)
74 }
76 drawJoystick(spriteBatch)
77 }
79 companion object {
80 private const val RENDER_LAYER = 100700
82 private const val SHADE_KEY = "shade"
83 }
85 }