diff options
| author | Jakob L. Kreuze <jakob@memeware.net> | 2018-12-15 19:41:19 -0500 |
|---|---|---|
| committer | Jakob L. Kreuze <jakob@memeware.net> | 2018-12-15 19:41:19 -0500 |
| commit | 6212b809c34ecf4b75bf9635cf0df98262ab25d5 (patch) | |
| tree | 53a4ed6015b4131c0205a757df134f31fe7f55f4 /app/src/main | |
| parent | 625685b9010a1157664d8f3f68b6884fd34f1b16 (diff) | |
Initial drawing from tile atlas
Diffstat (limited to 'app/src/main')
| -rw-r--r-- | app/src/main/java/space/jakob/mines/GameView.kt | 47 | ||||
| -rw-r--r-- | app/src/main/java/space/jakob/mines/Grid.kt | 9 |
2 files changed, 48 insertions, 8 deletions
diff --git a/app/src/main/java/space/jakob/mines/GameView.kt b/app/src/main/java/space/jakob/mines/GameView.kt index c7294df..f323403 100644 --- a/app/src/main/java/space/jakob/mines/GameView.kt +++ b/app/src/main/java/space/jakob/mines/GameView.kt @@ -13,21 +13,56 @@ package space.jakob.mines import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.graphics.Canvas +import android.graphics.Rect import android.graphics.Paint import android.util.AttributeSet import android.view.View +import android.util.Log + +const val atlasWidth = 3 + +enum class AtlasEntry { + BLANK, MASKED, UNMASKED, + ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, + FLAG, UNKNOWN, MINE, TRIPPED, +} class GameView(context: Context, attrs: AttributeSet) : View(context, attrs) { + val atlas = BitmapFactory.decodeResource(context.resources, R.drawable.atlas); + val tileWidth = atlas.width / 3 + + var grid: Grid? = null + + var cameraX = 0.0f + var cameraY = 0.0f + var sightX = 5.0f + var sightY = 5.0f + + val scaledWidth: Int + get() = width / (sightX - cameraX).toInt() + val scaledHeight: Int + get() = height / (sightY - cameraY).toInt() + + private fun atlasRect(entry: AtlasEntry, tileWidth: Int): Rect { + val x = (entry.ordinal % atlasWidth) * tileWidth + val y = (entry.ordinal / atlasWidth) * tileWidth + return Rect(x, y, x + tileWidth, y + tileWidth) + } + + private fun drawTile(canvas: Canvas, entry: AtlasEntry, x: Int, y: Int) { + val src = atlasRect(entry, tileWidth) + val dst = Rect(x, y, x + scaledWidth, y + scaledHeight) + canvas.drawBitmap(atlas, src, dst, null) + } + override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - val textPaint = Paint().apply { - textSize = 64f - } - - canvas.apply { - drawText("Hello, world!", 24f, 24f, textPaint) + for (i in 0..5) { + drawTile(canvas, AtlasEntry.MINE, i * scaledWidth - tileWidth / 2, 0) } } } diff --git a/app/src/main/java/space/jakob/mines/Grid.kt b/app/src/main/java/space/jakob/mines/Grid.kt index 7ba9442..b61f5f1 100644 --- a/app/src/main/java/space/jakob/mines/Grid.kt +++ b/app/src/main/java/space/jakob/mines/Grid.kt @@ -10,6 +10,10 @@ // You should have received a copy of the GNU General Public License along with // Mines. If not, see <https://www.gnu.org/licenses/>. +package space.jakob.mines + +import java.util.Random + data class Tile(val adjacentMines: Int = 0, val mine: Boolean = false, val masked: Boolean = true) /** @@ -19,8 +23,9 @@ class Grid(val width: Int, val height: Int, val tiles: Array<Tile>) { constructor(width: Int = 8, height: Int = 8, mines: Int = 10) : this(width, height, Array<Tile>(width * height) { Tile() }) { for (i in 0 until mines) { - val x = (0 until width).random() - val y = (0 until height).random() + // No access to kotlin.random.Random, so we have to use java.util.Random + val x = Random().nextInt(width) + val y = Random().nextInt(height) placeMine(x, y) } } |