summaryrefslogtreecommitdiff
path: root/app/src/main/java/space/jakob/mines/GameActivity.kt
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-12-20 09:42:05 -0500
committerJakob L. Kreuze <jakob@memeware.net>2018-12-20 09:42:05 -0500
commit30d17197c169d7dc1c8b210e6c43fbfd698cdad6 (patch)
treedcf1b6b4cd1fcbd425318b9fb8f19d0baac9ada0 /app/src/main/java/space/jakob/mines/GameActivity.kt
parentedfed0cf5065595d982c6a1d21f7c77b173ee2b5 (diff)
Initial pinch-to-zoom and tile revealing
Diffstat (limited to 'app/src/main/java/space/jakob/mines/GameActivity.kt')
-rw-r--r--app/src/main/java/space/jakob/mines/GameActivity.kt60
1 files changed, 54 insertions, 6 deletions
diff --git a/app/src/main/java/space/jakob/mines/GameActivity.kt b/app/src/main/java/space/jakob/mines/GameActivity.kt
index 49b301e..7e8313c 100644
--- a/app/src/main/java/space/jakob/mines/GameActivity.kt
+++ b/app/src/main/java/space/jakob/mines/GameActivity.kt
@@ -16,33 +16,80 @@ 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() {
+ 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) {
cameraX = (cameraX + dx / 100.0).coerceIn(0.0, gameView.maxCameraX)
cameraY = (cameraY + dy / 100.0).coerceIn(0.0, gameView.maxCameraY)
+ invalidate()
}
- gameView.invalidate()
return false
}
}
- override fun onTouchEvent(event: MotionEvent): Boolean {
- return if (gestureDetector.onTouchEvent(event)) {
- true
- } else {
- super.onTouchEvent(event)
+ // 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)
@@ -61,5 +108,6 @@ class GameActivity : AppCompatActivity() {
gameView.grid = Grid(width, height, mines)
gestureDetector = GestureDetectorCompat(this, gestureListener)
+ scaleGestureDetector = ScaleGestureDetector(this, scaleListener)
}
}