// Mines is free software: you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation, either version 3 of the License, or (at your option) any later // version. // Mines is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR // A PARTICULAR PURPOSE. See the GNU General Public License for more details. // You should have received a copy of the GNU General Public License along with // Mines. If not, see . 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) for (i in 0..5) { drawTile(canvas, AtlasEntry.MINE, i * scaledWidth - tileWidth / 2, 0) } } }