X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2Fwindows%2FCreativeWindowRenderer.kt;h=4c43600959ee866972f56b68c909c011c0c6b0f4;hb=cf4113d5bfd3fca7c3815bf14a214eebd822216c;hp=3480e2783f9fb12c5d26ede452ede14a11da8fc1;hpb=fd73b6dd24b9fe55c0bc8f52f8aa1104a5fe3cb0;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt b/core/src/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt index 3480e27..4c43600 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt @@ -4,120 +4,80 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.ShapeRenderer import com.badlogic.gdx.math.Rectangle import ru.deadsoftware.cavedroid.MainConfig -import ru.deadsoftware.cavedroid.game.GameInput import ru.deadsoftware.cavedroid.game.GameItemsHolder import ru.deadsoftware.cavedroid.game.GameScope +import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager import ru.deadsoftware.cavedroid.game.mobs.MobsController -import ru.deadsoftware.cavedroid.game.model.item.InventoryItem 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.misc.Assets import javax.inject.Inject +import kotlin.math.min @GameScope class CreativeWindowRenderer @Inject constructor( private val mainConfig: MainConfig, - private val gameInput: GameInput, + private val gameWindowsManager: GameWindowsManager, private val gameItemsHolder: GameItemsHolder, private val mobsController: MobsController, -) : IGameRenderer { +) : AbstractWindowRenderer(), IGameRenderer { override val renderLayer get() = WindowsRenderer.RENDER_LAYER private val creativeWindowTexture get() = requireNotNull(Assets.textureRegions[CREATIVE_WINDOW_KEY]) private val scrollIndicatorTexture get() = requireNotNull(Assets.textureRegions[SCROLL_INDICATOR_KEY]) - private fun drawItemsGrid(spriteBatch: SpriteBatch, gridX: Float, gridY: Float) { - val allItems = gameItemsHolder.getAllItems() - val startIndex = gameInput.creativeScroll * CreativeWindowConfig.itemsInRow - val endIndex = startIndex + CreativeWindowConfig.itemsOnPage - - for (i in startIndex ..< endIndex) { - if (i !in allItems.indices) { - break - } - val item = allItems.elementAt(i) - - if (item.isNone()) { - continue - } - - val gridIndex = i - startIndex - - val itemX = gridX + (gridIndex % CreativeWindowConfig.itemsInRow) * CreativeWindowConfig.itemsGridColWidth - val itemY = gridY + (gridIndex / CreativeWindowConfig.itemsInRow) * CreativeWindowConfig.itemsGridRowHeight - - spriteBatch.draw(item.sprite, itemX, itemY) - } - } - - private fun drawPlayerInventory(spriteBatch: SpriteBatch, inventoryX: Float, inventoryY: Float) { - mobsController.player.inventory.asSequence() - .map(InventoryItem::item) - .forEachIndexed { index, item -> - if (item.isNone()) { - return@forEachIndexed - } - - val itemX = inventoryX + index * CreativeWindowConfig.itemsGridColWidth - spriteBatch.draw(item.sprite, itemX, inventoryY) - } - } - - private fun drawCreative(spriteBatch: SpriteBatch, viewport: Rectangle) { + override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) { val creativeWindow = creativeWindowTexture val windowX = viewport.width / 2 - creativeWindow.regionWidth / 2 val windowY = viewport.height / 2 - creativeWindow.regionHeight / 2 - val oneScrollAmount = CreativeWindowConfig.scrollIndicatorFullHeight / gameItemsHolder.getCreativeScrollAmount() + val oneScrollAmount = GameWindowsConfigs.Creative.scrollIndicatorFullHeight / gameItemsHolder.getMaxCreativeScrollAmount() spriteBatch.draw(creativeWindow, windowX, windowY) spriteBatch.draw( /* region = */ scrollIndicatorTexture, - /* x = */ windowX + CreativeWindowConfig.scrollIndicatorMarginLeft, - /* y = */ windowY + CreativeWindowConfig.scrollIndicatorMarginTop - + (gameInput.creativeScroll * oneScrollAmount) + /* x = */ windowX + GameWindowsConfigs.Creative.scrollIndicatorMarginLeft, + /* y = */ windowY + GameWindowsConfigs.Creative.scrollIndicatorMarginTop + + (gameWindowsManager.creativeScrollAmount * oneScrollAmount) ) + val allItems = gameItemsHolder.getAllItems() + val startIndex = gameWindowsManager.creativeScrollAmount * GameWindowsConfigs.Creative.itemsInRow + val endIndex = min(startIndex + GameWindowsConfigs.Creative.itemsOnPage, allItems.size) + val items = sequence { + for (i in startIndex..