DEADSOFTWARE

Add chest
[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 class TouchControlsRenderer @Inject constructor(
21 private val mainConfig: MainConfig,
22 private val mobsController: MobsController,
23 private val gameWindowsManager: GameWindowsManager,
24 ) : IGameRenderer {
26 override val renderLayer get() = RENDER_LAYER
28 private val shadeTexture get() = Assets.textureRegions[SHADE_KEY]
30 private fun drawJoystick(spriteBatch: SpriteBatch) {
31 val joystick = mainConfig.joystick?.takeIf { it.active } ?: return
33 spriteBatch.drawSprite(
34 sprite = Assets.joyBackground,
35 x = joystick.centerX - Joystick.RADIUS,
36 y = joystick.centerY - Joystick.RADIUS,
37 width = Joystick.SIZE,
38 height = Joystick.SIZE
39 )
41 spriteBatch.drawSprite(
42 sprite = Assets.joyStick,
43 x = joystick.activeX - Joystick.STICK_SIZE / 2,
44 y = joystick.activeY - Joystick.STICK_SIZE / 2,
45 width = Joystick.STICK_SIZE,
46 height = Joystick.STICK_SIZE
47 )
48 }
50 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
51 if (!mainConfig.isTouch || gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE) {
52 return
53 }
55 val touchControlsMap = Assets.guiMap
57 touchControlsMap.forEach { (key, value) ->
58 val touchKey = value.rect
59 spriteBatch.draw(
60 /* region = */ Assets.textureRegions[key],
61 /* x = */ touchKey.x,
62 /* y = */ touchKey.y,
63 /* width = */ touchKey.width,
64 /* height = */ touchKey.height
65 )
66 }
68 // FIXME: Add pressed state for buttons
69 if (mobsController.player.controlMode == ControlMode.CURSOR) {
70 val altKeyRect = touchControlsMap.get("alt").rect
71 spriteBatch.draw(shadeTexture, altKeyRect.x, altKeyRect.y, altKeyRect.width, altKeyRect.height)
72 }
74 drawJoystick(spriteBatch)
75 }
77 companion object {
78 private const val RENDER_LAYER = 100700
80 private const val SHADE_KEY = "shade"
81 }
83 }