X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2Fwindows%2FSurvivalWindowRenderer.kt;h=7ee3b27087eb76bd0b75f2549786b54b5eac241c;hb=456e76ce31c05500ab7d9e78e2b02019143929a4;hp=f8a6ac00b929ce8b9305716b76d1eeda35e946bd;hpb=060595c8f929b1eba81653c5154f948fb12190ff;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt b/core/src/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt index f8a6ac0..7ee3b27 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt @@ -6,11 +6,15 @@ 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 import ru.deadsoftware.cavedroid.game.render.IGameRenderer import ru.deadsoftware.cavedroid.game.render.WindowsRenderer +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager +import ru.deadsoftware.cavedroid.game.ui.windows.inventory.SurvivalInventoryWindow import ru.deadsoftware.cavedroid.misc.Assets import javax.inject.Inject import kotlin.math.atan @@ -19,6 +23,8 @@ import kotlin.math.atan 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 @@ -47,73 +53,85 @@ class SurvivalWindowRenderer @Inject constructor( } private fun drawPlayerPortrait(spriteBatch: SpriteBatch, windowX: Float, windowY: Float, delta: Float) { - val portraitX = windowX + Config.portraitMarginLeft + - (Config.portraitWidth / 2 - mobsController.player.width / 2) - val portraitY = windowY + Config.portraitMarginTop + - (Config.portraitHeight / 2 - mobsController.player.height / 2) + val portraitX = windowX + GameWindowsConfigs.Survival.portraitMarginLeft + + (GameWindowsConfigs.Survival.portraitWidth / 2 - mobsController.player.width / 2) + val portraitY = windowY + GameWindowsConfigs.Survival.portraitMarginTop + + (GameWindowsConfigs.Survival.portraitHeight / 2 - mobsController.player.height / 2) setPortraitHeadRotation(portraitX, portraitY) mobsController.player.draw(spriteBatch, portraitX, portraitY, delta) } 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) drawItemsGrid( spriteBatch = spriteBatch, shapeRenderer = shapeRenderer, - gridX = windowX + Config.itemsGridMarginLeft, - gridY = windowY + Config.itemsGridMarginTop, - items = mobsController.player.inventory.asSequence() - .drop(Config.hotbarCells) - .take(Config.itemsInCol * Config.itemsInRow) + gridX = windowX + GameWindowsConfigs.Survival.itemsGridMarginLeft, + gridY = windowY + GameWindowsConfigs.Survival.itemsGridMarginTop, + items = mobsController.player.inventory.items.asSequence() + .drop(GameWindowsConfigs.Survival.hotbarCells) + .take(GameWindowsConfigs.Survival.itemsInCol * GameWindowsConfigs.Survival.itemsInRow) .asIterable(), - itemsInRow = Config.itemsInRow, - cellWidth = Config.itemsGridColWidth, - cellHeight = Config.itemsGridRowHeight, + itemsInRow = GameWindowsConfigs.Survival.itemsInRow, + cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth, + cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight, ) drawItemsGrid( spriteBatch = spriteBatch, shapeRenderer = shapeRenderer, - gridX = windowX + Config.itemsGridMarginLeft, - gridY = windowY + survivalWindow.regionHeight - Config.hotbarOffsetFromBottom, - items = mobsController.player.inventory.asSequence() - .take(Config.hotbarCells) + gridX = windowX + GameWindowsConfigs.Survival.itemsGridMarginLeft, + gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Survival.hotbarOffsetFromBottom, + items = mobsController.player.inventory.items.asSequence() + .take(GameWindowsConfigs.Survival.hotbarCells) .asIterable(), - itemsInRow = Config.hotbarCells, - cellWidth = Config.itemsGridColWidth, - cellHeight = Config.itemsGridRowHeight, + itemsInRow = GameWindowsConfigs.Survival.hotbarCells, + cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth, + cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight, ) - } - - companion object { - private const val SURVIVAL_WINDOW_KEY = "survival" - - private data object Config { - const val itemsGridMarginLeft = 8f - const val itemsGridMarginTop = 84f - const val itemsGridRowHeight = 18f - const val itemsGridColWidth = 18f + 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, + ) - const val itemsInRow = 8 - const val itemsInCol = 5 + window.craftResult?.draw( + spriteBatch = spriteBatch, + shapeRenderer = shapeRenderer, + x = windowX + GameWindowsConfigs.Survival.craftResultOffsetX, + y = windowY + GameWindowsConfigs.Survival.craftResultOffsetY + ) - const val hotbarOffsetFromBottom = 24f - const val hotbarCells = 9 + window.selectedItem?.drawSelected( + spriteBatch = spriteBatch, + x = Gdx.input.x * (viewport.width / Gdx.graphics.width), + y = Gdx.input.y * (viewport.height / Gdx.graphics.height) + ) + } - const val portraitMarginLeft = 24f - const val portraitMarginTop = 8f - const val portraitWidth = 48f - const val portraitHeight = 68f - } + companion object { + private const val SURVIVAL_WINDOW_KEY = "survival" } } \ No newline at end of file