// 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.support.v7.app.AppCompatActivity import android.support.v4.view.GestureDetectorCompat import android.os.Bundle import android.view.GestureDetector import android.view.ScaleGestureDetector import android.view.MotionEvent import android.util.Log class GameActivity : AppCompatActivity() { lateinit var gameView: GameView lateinit var gestureDetector: GestureDetectorCompat lateinit var scaleGestureDetector: ScaleGestureDetector // Implements the callbacks for gestureDetector. val gestureListener = object : GestureDetector.SimpleOnGestureListener() { // TODO: Replace with onUp // override fun onDown(e: MotionEvent): Boolean { // with (gameView) { // grid?.let { // val (x, y) = toGridCoordinates(e.x.toInt(), e.y.toInt()) // it.reveal(x, y) // invalidate() // } // } // return false // } override fun onScroll(e1: MotionEvent, e2: MotionEvent, dx: Float, dy: Float): Boolean { with (gameView) { moveCamera(dx.toDouble(), dy.toDouble()) invalidate() } return false } } // Implements the callbacks for scaleGestureDetector. val scaleListener = object : ScaleGestureDetector.SimpleOnScaleGestureListener() { // override fun onScale(scaleGestureDetector: ScaleGestureDetector) : Boolean { // with (gameView) { // grid?.let { // val factor = scaleGestureDetector.getScaleFactor() // var currentDistance = sightX - cameraX // var desiredDistance = currentDistance / factor // var deltaDistance = Math.abs(desiredDistance - currentDistance) / 2 // if (factor < 1.0) { // cameraX = (cameraX - deltaDistance).coerceAtLeast(0.0) // sightX = (sightX + deltaDistance).coerceAtMost(it.width.toDouble() - cameraX) // } else { // cameraX = cameraX + deltaDistance // sightX = sightX - deltaDistance // } // currentDistance = sightY - cameraY // desiredDistance = currentDistance / factor // deltaDistance = Math.abs(desiredDistance - currentDistance) / 2 // if (factor < 1.0) { // cameraY = (cameraY - deltaDistance).coerceAtLeast(0.0) // sightY = (sightY + deltaDistance).coerceAtMost(it.height.toDouble() - cameraY) // } else { // cameraY = cameraY + deltaDistance // sightY = sightY - deltaDistance // } // } // } // return false // } } override fun onTouchEvent(event: MotionEvent): Boolean { return gestureDetector.onTouchEvent(event) || scaleGestureDetector.onTouchEvent(event) || super.onTouchEvent(event) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_game) var width = 8 var height = 8 var mines = 10 getIntent()?.let { width = it.getIntExtra("WIDTH", width) height = it.getIntExtra("HEIGHT", height) mines = it.getIntExtra("MINES", mines) } gameView = findViewById(R.id.view) as GameView gameView.grid = Grid(width, height, mines) gestureDetector = GestureDetectorCompat(this, gestureListener) scaleGestureDetector = ScaleGestureDetector(this, scaleListener) } }