DEADSOFTWARE

Add crafting
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / windows / SurvivalWindowRenderer.kt
index 39580de82cecd8a42d63a0dcf9eb25fd991ddb97..56df2cac3ad173f16bc9eeafc2808dbc0f69ce19 100644 (file)
@@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.MathUtils
 import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.MainConfig
+import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.mobs.Mob
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
@@ -13,6 +14,7 @@ import ru.deadsoftware.cavedroid.game.render.IGameRenderer
 import ru.deadsoftware.cavedroid.game.render.WindowsRenderer
 import ru.deadsoftware.cavedroid.game.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.game.windows.inventory.SurvivalInventoryWindow
 import ru.deadsoftware.cavedroid.misc.Assets
 import javax.inject.Inject
 import kotlin.math.atan
@@ -22,6 +24,7 @@ class SurvivalWindowRenderer @Inject constructor(
     private val mainConfig: MainConfig,
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
+    private val gameItemsHolder: GameItemsHolder,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
@@ -60,12 +63,13 @@ class SurvivalWindowRenderer @Inject constructor(
     }
 
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
-        val survivalWindow = survivalWindowTexture
+        val windowTexture = survivalWindowTexture
+        val window = gameWindowsManager.currentWindow as SurvivalInventoryWindow
 
-        val windowX = viewport.width / 2 - survivalWindow.regionWidth / 2
-        val windowY = viewport.height / 2 - survivalWindow.regionHeight / 2
+        val windowX = viewport.width / 2 - windowTexture.regionWidth / 2
+        val windowY = viewport.height / 2 - windowTexture.regionHeight / 2
 
-        spriteBatch.draw(survivalWindow, windowX, windowY)
+        spriteBatch.draw(windowTexture, windowX, windowY)
 
         drawPlayerPortrait(spriteBatch, windowX, windowY, delta)
 
@@ -87,7 +91,7 @@ class SurvivalWindowRenderer @Inject constructor(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
             gridX = windowX + GameWindowsConfigs.Survival.itemsGridMarginLeft,
-            gridY = windowY + survivalWindow.regionHeight - GameWindowsConfigs.Survival.hotbarOffsetFromBottom,
+            gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Survival.hotbarOffsetFromBottom,
             items = mobsController.player.inventory.asSequence()
                 .take(GameWindowsConfigs.Survival.hotbarCells)
                 .asIterable(),
@@ -96,7 +100,31 @@ class SurvivalWindowRenderer @Inject constructor(
             cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight,
         )
 
-        gameWindowsManager.selectedItem?.drawSelected(
+        drawItemsGrid(
+            spriteBatch = spriteBatch,
+            shapeRenderer = shapeRenderer,
+            gridX = windowX + GameWindowsConfigs.Survival.craftOffsetX,
+            gridY = windowY + GameWindowsConfigs.Survival.craftOffsetY,
+            items = window.craftingItems.asSequence().mapIndexedNotNull { index, it ->
+                if (index % 3 > 1 || index / 3 > 1) {
+                    null
+                } else {
+                    it ?: gameItemsHolder.fallbackItem.toInventoryItem()
+                }
+            }.asIterable(),
+            itemsInRow = GameWindowsConfigs.Survival.craftGridSize,
+            cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth,
+            cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight,
+        )
+
+        window.craftResult?.draw(
+            spriteBatch = spriteBatch,
+            shapeRenderer = shapeRenderer,
+            x = windowX + GameWindowsConfigs.Survival.craftResultOffsetX,
+            y = windowY + GameWindowsConfigs.Survival.craftResultOffsetY
+        )
+
+        window.selectedItem?.drawSelected(
             spriteBatch = spriteBatch,
             x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
             y = Gdx.input.y * (viewport.height / Gdx.graphics.height)