DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / windows / ChestWindowRenderer.kt
1 package ru.deadsoftware.cavedroid.game.render.windows
3 import com.badlogic.gdx.Gdx
4 import com.badlogic.gdx.graphics.g2d.SpriteBatch
5 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
6 import com.badlogic.gdx.math.MathUtils
7 import com.badlogic.gdx.math.Rectangle
8 import ru.deadsoftware.cavedroid.MainConfig
9 import ru.deadsoftware.cavedroid.game.GameItemsHolder
10 import ru.deadsoftware.cavedroid.game.GameScope
11 import ru.deadsoftware.cavedroid.game.mobs.Mob
12 import ru.deadsoftware.cavedroid.game.mobs.MobsController
13 import ru.deadsoftware.cavedroid.game.render.IGameRenderer
14 import ru.deadsoftware.cavedroid.game.render.WindowsRenderer
15 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
16 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
17 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.ChestInventoryWindow
18 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.SurvivalInventoryWindow
19 import ru.deadsoftware.cavedroid.misc.Assets
20 import javax.inject.Inject
21 import kotlin.math.atan
23 @GameScope
24 class ChestWindowRenderer @Inject constructor(
25 private val mainConfig: MainConfig,
26 private val mobsController: MobsController,
27 private val gameWindowsManager: GameWindowsManager,
28 private val gameItemsHolder: GameItemsHolder,
29 ) : AbstractWindowRenderer(), IGameRenderer {
31 override val renderLayer get() = WindowsRenderer.RENDER_LAYER
33 private val chestWindowTexture get() = requireNotNull(Assets.textureRegions[CHEST_WINDOW_KEY])
36 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
37 val windowTexture = chestWindowTexture
38 val window = gameWindowsManager.currentWindow as ChestInventoryWindow
40 val windowX = viewport.width / 2 - windowTexture.regionWidth / 2
41 val windowY = viewport.height / 2 - windowTexture.regionHeight / 2
43 spriteBatch.draw(windowTexture, windowX, windowY)
45 drawItemsGrid(
46 spriteBatch = spriteBatch,
47 shapeRenderer = shapeRenderer,
48 gridX = windowX + GameWindowsConfigs.Chest.contentsMarginLeft,
49 gridY = windowY + GameWindowsConfigs.Chest.contentsMarginTop,
50 items = window.chest.items,
51 itemsInRow = GameWindowsConfigs.Chest.itemsInRow,
52 cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
53 cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
54 )
56 drawItemsGrid(
57 spriteBatch = spriteBatch,
58 shapeRenderer = shapeRenderer,
59 gridX = windowX + GameWindowsConfigs.Chest.itemsGridMarginLeft,
60 gridY = windowY + GameWindowsConfigs.Chest.itemsGridMarginTop,
61 items = mobsController.player.inventory.items.asSequence()
62 .drop(GameWindowsConfigs.Chest.hotbarCells)
63 .take(GameWindowsConfigs.Chest.itemsInCol * GameWindowsConfigs.Chest.itemsInRow)
64 .asIterable(),
65 itemsInRow = GameWindowsConfigs.Chest.itemsInRow,
66 cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
67 cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
68 )
70 drawItemsGrid(
71 spriteBatch = spriteBatch,
72 shapeRenderer = shapeRenderer,
73 gridX = windowX + GameWindowsConfigs.Chest.itemsGridMarginLeft,
74 gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Chest.hotbarOffsetFromBottom,
75 items = mobsController.player.inventory.items.asSequence()
76 .take(GameWindowsConfigs.Chest.hotbarCells)
77 .asIterable(),
78 itemsInRow = GameWindowsConfigs.Chest.hotbarCells,
79 cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
80 cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
81 )
83 window.selectedItem?.drawSelected(
84 spriteBatch = spriteBatch,
85 x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
86 y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
87 )
88 }
90 companion object {
91 private const val CHEST_WINDOW_KEY = "chest"
92 }
93 }