DEADSOFTWARE

Update README
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / windows / CraftingWindowRenderer.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.windows.GameWindowsConfigs
14 import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
15 import ru.deadsoftware.cavedroid.game.windows.inventory.CraftingInventoryWindow
16 import ru.deadsoftware.cavedroid.misc.Assets
17 import javax.inject.Inject
19 @GameScope
20 class CraftingWindowRenderer @Inject constructor(
21 private val mainConfig: MainConfig,
22 private val mobsController: MobsController,
23 private val gameWindowsManager: GameWindowsManager,
24 private val gameItemsHolder: GameItemsHolder,
25 ) : AbstractWindowRenderer(), IGameRenderer {
27 override val renderLayer get() = WindowsRenderer.RENDER_LAYER
29 private val craftingWindowTexture get() = requireNotNull(Assets.textureRegions[CRAFTING_WINDOW_KEY])
31 override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
32 val windowTexture = craftingWindowTexture
33 val window = gameWindowsManager.currentWindow as CraftingInventoryWindow
35 val windowX = viewport.width / 2 - windowTexture.regionWidth / 2
36 val windowY = viewport.height / 2 - windowTexture.regionHeight / 2
38 spriteBatch.draw(windowTexture, windowX, windowY)
40 drawItemsGrid(
41 spriteBatch = spriteBatch,
42 shapeRenderer = shapeRenderer,
43 gridX = windowX + GameWindowsConfigs.Crafting.itemsGridMarginLeft,
44 gridY = windowY + GameWindowsConfigs.Crafting.itemsGridMarginTop,
45 items = mobsController.player.inventory.asSequence()
46 .drop(GameWindowsConfigs.Crafting.hotbarCells)
47 .take(GameWindowsConfigs.Crafting.itemsInCol * GameWindowsConfigs.Crafting.itemsInRow)
48 .asIterable(),
49 itemsInRow = GameWindowsConfigs.Crafting.itemsInRow,
50 cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
51 cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
52 )
54 drawItemsGrid(
55 spriteBatch = spriteBatch,
56 shapeRenderer = shapeRenderer,
57 gridX = windowX + GameWindowsConfigs.Crafting.itemsGridMarginLeft,
58 gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Crafting.hotbarOffsetFromBottom,
59 items = mobsController.player.inventory.asSequence()
60 .take(GameWindowsConfigs.Crafting.hotbarCells)
61 .asIterable(),
62 itemsInRow = GameWindowsConfigs.Crafting.hotbarCells,
63 cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
64 cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
65 )
67 drawItemsGrid(
68 spriteBatch = spriteBatch,
69 shapeRenderer = shapeRenderer,
70 gridX = windowX + GameWindowsConfigs.Crafting.craftOffsetX,
71 gridY = windowY + GameWindowsConfigs.Crafting.craftOffsetY,
72 items = window.craftingItems.asSequence().map { it ?: gameItemsHolder.fallbackItem.toInventoryItem()}.asIterable(),
73 itemsInRow = GameWindowsConfigs.Crafting.craftGridSize,
74 cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
75 cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
76 )
78 window.craftResult?.draw(
79 spriteBatch = spriteBatch,
80 shapeRenderer = shapeRenderer,
81 x = windowX + GameWindowsConfigs.Crafting.craftResultOffsetX,
82 y = windowY + GameWindowsConfigs.Crafting.craftResultOffsetY
83 )
85 window.selectedItem?.drawSelected(
86 spriteBatch = spriteBatch,
87 x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
88 y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
89 )
90 }
92 companion object {
93 private const val CRAFTING_WINDOW_KEY = "crafting_table"
94 }
95 }