diff --git a/core/src/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt b/core/src/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt
index 28c38276650f23485ade46a73bccbe37fa4ac86a..917f69b591933ee9a6bfc83354e5f012c0894363 100644 (file)
package ru.deadsoftware.cavedroid.misc.utils
package ru.deadsoftware.cavedroid.misc.utils
+import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.Color
+import com.badlogic.gdx.graphics.GL20
+import com.badlogic.gdx.graphics.g2d.GlyphLayout
+import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.math.Rectangle
import com.badlogic.gdx.math.Rectangle
+import ru.deadsoftware.cavedroid.MainConfig
+import ru.deadsoftware.cavedroid.misc.Assets
private fun Rectangle.shifted(shift: Float) = Rectangle(x + shift, y, width, height)
private fun Rectangle.shifted(shift: Float) = Rectangle(x + shift, y, width, height)
fun forEachBlockInArea(
area: Rectangle,
fun forEachBlockInArea(
area: Rectangle,
- func: (x: Int, y: Int) -> Unit
+ func: (x: Int, y: Int) -> Unit,
) {
val startMapX = area.x.bl
) {
val startMapX = area.x.bl
- val endMapX = startMapX + area.width.bl + 1
+ val endMapX = (area.x + area.width - 1f).bl
val startMapY = area.y.bl
val startMapY = area.y.bl
- val endMapY = startMapY + area.height.bl + 1
+ val endMapY = (area.y + area.height - 1f).bl
for (x in startMapX..endMapX) {
for (y in startMapY..endMapY) {
func(x, y)
}
}
for (x in startMapX..endMapX) {
for (y in startMapY..endMapY) {
func(x, y)
}
}
-}
\ No newline at end of file
+}
+
+@JvmOverloads
+fun SpriteBatch.drawString(str: String, x: Float, y: Float, color: Color = Color.WHITE): GlyphLayout {
+ Assets.minecraftFont.color = color
+ return Assets.minecraftFont.draw(this, str, x, y)
+}
+
+/**
+ * Parses hex color string into [Color]
+ * Format is strictly #FFFFFF
+ */
+fun colorFromHexString(hex: String): Color {
+ if (hex[0] != '#' || hex.length != 7) {
+ return Color.WHITE
+ }
+
+ var rgba = try {
+ hex.substring(1).toInt(16)
+ } catch (e: NumberFormatException) {
+ 0xffffff
+ }
+
+ rgba = (rgba shl 8) or 0xFF
+ return Color(rgba)
+}
+
+fun SpriteBatch.withScissors(
+ mainConfig: MainConfig,
+ x: Float,
+ y: Float,
+ width: Float,
+ height: Float,
+ block: () -> Unit
+) {
+ val scaleX = Gdx.graphics.width / mainConfig.width
+ val scaleY = Gdx.graphics.height / mainConfig.height
+
+ flush()
+ Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST)
+ Gdx.gl.glScissor(
+ /* x = */ (x * scaleX).toInt(),
+ /* y = */ ((mainConfig.height - y - height) * scaleY).toInt(),
+ /* width = */ (width * scaleX).toInt(),
+ /* height = */ (height * scaleY).toInt()
+ )
+ block.invoke()
+ flush()
+ Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST)
+}