DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / windows / FurnaceWindowRenderer.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.Rectangle
7 import ru.deadsoftware.cavedroid.MainConfig
8 import ru.deadsoftware.cavedroid.game.GameItemsHolder
9 import ru.deadsoftware.cavedroid.game.GameScope
10 import ru.deadsoftware.cavedroid.game.mobs.MobsController
11 import ru.deadsoftware.cavedroid.game.render.IGameRenderer
12 import ru.deadsoftware.cavedroid.game.render.WindowsRenderer
13 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
14 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
15 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.FurnaceInventoryWindow
16 import ru.deadsoftware.cavedroid.misc.Assets
17 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
18 import ru.deadsoftware.cavedroid.misc.utils.withScissors
19 import javax.inject.Inject
21 @GameScope
22 class FurnaceWindowRenderer @Inject constructor(
23 private val mainConfig: MainConfig,
24 private val mobsController: MobsController,
25 private val gameWindowsManager: GameWindowsManager,
26 private val gameItemsHolder: GameItemsHolder,
27 ) : AbstractWindowRenderer(), IGameRenderer {
29 override val renderLayer get() = WindowsRenderer.RENDER_LAYER
31 private val furnaceWindowTexture get() = requireNotNull(Assets.textureRegions[FURNACE_WINDOW_KEY])
34 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
35 val windowTexture = furnaceWindowTexture
37 val window = gameWindowsManager.currentWindow as FurnaceInventoryWindow
39 val windowX = viewport.width / 2 - windowTexture.regionWidth / 2
40 val windowY = viewport.height / 2 - windowTexture.regionHeight / 2
42 spriteBatch.draw(windowTexture, windowX, windowY)
43 drawItemsGrid(
44 spriteBatch = spriteBatch,
45 shapeRenderer = shapeRenderer,
46 gridX = windowX + GameWindowsConfigs.Furnace.itemsGridMarginLeft,
47 gridY = windowY + GameWindowsConfigs.Furnace.itemsGridMarginTop,
48 items = mobsController.player.inventory.items.asSequence()
49 .drop(GameWindowsConfigs.Furnace.hotbarCells)
50 .take(GameWindowsConfigs.Furnace.itemsInCol * GameWindowsConfigs.Furnace.itemsInRow)
51 .asIterable(),
52 itemsInRow = GameWindowsConfigs.Furnace.itemsInRow,
53 cellWidth = GameWindowsConfigs.Furnace.itemsGridColWidth,
54 cellHeight = GameWindowsConfigs.Furnace.itemsGridRowHeight,
55 )
57 drawItemsGrid(
58 spriteBatch = spriteBatch,
59 shapeRenderer = shapeRenderer,
60 gridX = windowX + GameWindowsConfigs.Furnace.itemsGridMarginLeft,
61 gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Furnace.hotbarOffsetFromBottom,
62 items = mobsController.player.inventory.items.asSequence()
63 .take(GameWindowsConfigs.Furnace.hotbarCells)
64 .asIterable(),
65 itemsInRow = GameWindowsConfigs.Furnace.hotbarCells,
66 cellWidth = GameWindowsConfigs.Furnace.itemsGridColWidth,
67 cellHeight = GameWindowsConfigs.Furnace.itemsGridRowHeight,
68 )
70 window.furnace.fuel?.draw(
71 spriteBatch = spriteBatch,
72 shapeRenderer = shapeRenderer,
73 x = windowX + GameWindowsConfigs.Furnace.smeltFuelMarginLeft,
74 y = windowY + GameWindowsConfigs.Furnace.smeltFuelMarginTop
75 )
77 window.furnace.input?.draw(
78 spriteBatch = spriteBatch,
79 shapeRenderer = shapeRenderer,
80 x = windowX + GameWindowsConfigs.Furnace.smeltInputMarginLeft,
81 y = windowY + GameWindowsConfigs.Furnace.smeltInputMarginTop
82 )
84 window.furnace.result?.draw(
85 spriteBatch = spriteBatch,
86 shapeRenderer = shapeRenderer,
87 x = windowX + GameWindowsConfigs.Furnace.smeltResultOffsetX,
88 y = windowY + GameWindowsConfigs.Furnace.smeltResultOffsetY
89 )
91 if (window.furnace.isActive) {
92 val burn = GameWindowsConfigs.Furnace.fuelBurnHeight * window.furnace.burnProgress
94 spriteBatch.withScissors(
95 mainConfig = mainConfig,
96 x = windowX + GameWindowsConfigs.Furnace.fuelBurnMarginLeft,
97 y = windowY + GameWindowsConfigs.Furnace.fuelBurnMarginTop + burn,
98 width = Assets.furnaceBurn.width,
99 height = GameWindowsConfigs.Furnace.fuelBurnHeight,
100 ) {
101 spriteBatch.drawSprite(
102 sprite = Assets.furnaceBurn,
103 x = windowX + GameWindowsConfigs.Furnace.fuelBurnMarginLeft,
104 y = windowY + GameWindowsConfigs.Furnace.fuelBurnMarginTop
108 if (window.furnace.canSmelt()) {
109 val progress = GameWindowsConfigs.Furnace.progressWidth * window.furnace.smeltProgress
111 spriteBatch.withScissors(
112 mainConfig = mainConfig,
113 x = windowX + GameWindowsConfigs.Furnace.progressMarginLeft,
114 y = windowY + GameWindowsConfigs.Furnace.progressMarginTop,
115 width = progress,
116 height = Assets.furnaceProgress.height
117 ) {
118 spriteBatch.drawSprite(
119 sprite = Assets.furnaceProgress,
120 x = windowX + GameWindowsConfigs.Furnace.progressMarginLeft,
121 y = windowY + GameWindowsConfigs.Furnace.progressMarginTop,
127 window.selectedItem?.drawSelected(
128 spriteBatch = spriteBatch,
129 x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
130 y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
134 companion object {
135 private const val FURNACE_WINDOW_KEY = "furnace"