DEADSOFTWARE

Add survival inventory
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / render / windows / AbstractWindowRenderer.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 ru.deadsoftware.cavedroid.game.model.item.InventoryItem
7 import ru.deadsoftware.cavedroid.game.model.item.Item
9 abstract class AbstractWindowRenderer {
11 protected inline fun <reified T> drawItemsGrid(
12 spriteBatch: SpriteBatch,
13 shapeRenderer: ShapeRenderer,
14 gridX: Float,
15 gridY: Float,
16 items: Iterable<T>,
17 itemsInRow: Int,
18 cellWidth: Float,
19 cellHeight: Float
20 ) {
21 if (T::class != Item::class && T::class != InventoryItem::class) {
22 Gdx.app.log(_TAG, "Trying to draw items grid of not items")
23 return
24 }
26 items.forEachIndexed { index, element ->
27 val item = element as? Item
28 val inventoryItem = element as? InventoryItem
30 if (item == null && inventoryItem == null) {
31 throw IllegalStateException("This should be unreachable")
32 }
34 if (item?.isNone() == true || inventoryItem?.item?.isNone() == true) {
35 return@forEachIndexed
36 }
38 val itemX = gridX + (index % itemsInRow) * cellWidth
39 val itemY = gridY + (index / itemsInRow) * cellHeight
41 inventoryItem?.draw(spriteBatch, shapeRenderer, itemX, itemY)
42 ?: item?.let { spriteBatch.draw(it.sprite, itemX, itemY) }
43 }
44 }
46 companion object {
47 protected const val _TAG = "AbstractWindowRenderer"
48 }
50 }