package ru.deadsoftware.cavedroid.game.render.windows 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.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.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 gameItemsHolder: GameItemsHolder, private val mobsController: MobsController, ) : 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]) 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() spriteBatch.draw(creativeWindow, windowX, windowY) spriteBatch.draw( /* region = */ scrollIndicatorTexture, /* x = */ windowX + CreativeWindowConfig.scrollIndicatorMarginLeft, /* y = */ windowY + CreativeWindowConfig.scrollIndicatorMarginTop + (gameInput.creativeScroll * oneScrollAmount) ) val allItems = gameItemsHolder.getAllItems() val startIndex = gameInput.creativeScroll * CreativeWindowConfig.itemsInRow val endIndex = min(startIndex + CreativeWindowConfig.itemsOnPage, allItems.size) val items = sequence { for (i in startIndex..