DEADSOFTWARE

Update README
[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
8 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
10 abstract class AbstractWindowRenderer {
12 protected inline fun <reified T> drawItemsGrid(
13 spriteBatch: SpriteBatch,
14 shapeRenderer: ShapeRenderer,
15 gridX: Float,
16 gridY: Float,
17 items: Iterable<T>,
18 itemsInRow: Int,
19 cellWidth: Float,
20 cellHeight: Float
21 ) {
22 if (T::class != Item::class && T::class != InventoryItem::class) {
23 Gdx.app.log(_TAG, "Trying to draw items grid of not items")
24 return
25 }
27 items.forEachIndexed { index, element ->
28 val item = element as? Item
29 val inventoryItem = element as? InventoryItem
31 if (item == null && inventoryItem == null) {
32 throw IllegalStateException("This should be unreachable")
33 }
35 if (item?.isNone() == true || inventoryItem?.item?.isNone() == true) {
36 return@forEachIndexed
37 }
39 val itemX = gridX + (index % itemsInRow) * cellWidth
40 val itemY = gridY + (index / itemsInRow) * cellHeight
42 inventoryItem?.draw(spriteBatch, shapeRenderer, itemX, itemY)
43 ?: item?.let { spriteBatch.drawSprite(it.sprite, itemX, itemY) }
44 }
45 }
47 companion object {
48 protected const val _TAG = "AbstractWindowRenderer"
49 }
51 }