mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 13:27:22 -04:00
Removed long click action. It was more trouble than it was worth.
This commit is contained in:
parent
2280f16a2d
commit
6124fd5271
@ -9,7 +9,6 @@ import com.badlogic.gdx.scenes.scene2d.actions.FloatAction
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.logic.automation.UnitAutomation
|
||||
@ -101,36 +100,6 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
|
||||
zoom(scale)
|
||||
}
|
||||
|
||||
|
||||
// Memory profiling reveals that creating an GestureDetector inside the ActorGestureListener
|
||||
// for every tile is VERY memory-intensive.
|
||||
// Instead, we now create a single GestureListener, and in it check which tileGroup was hit.
|
||||
|
||||
fun toTileGroup(stageCoordinatesVector: Vector2): WorldTileGroup? {
|
||||
for (tileGroup in tileGroups.values) {
|
||||
val point = stageCoordinatesVector.cpy()
|
||||
tileGroup.stageToLocalCoordinates(point)
|
||||
val hit = tileGroup.hit(point.x, point.y, false)
|
||||
if (hit != null) return tileGroup
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun longPress(actor: Actor, x: Float, y: Float): Boolean {
|
||||
if (!worldScreen.isPlayersTurn) return false // no long click when it's not your turn
|
||||
// otherwise it activates,
|
||||
// since it's been a long time since the touchdown and no touchup has activates
|
||||
if (isPanning || isFlinging) return false
|
||||
// x and y are in local coordinates, so convert to stage coordinates
|
||||
// (we're basically undoing what the ActorGestureListener did)
|
||||
val coords = Vector2(x, y)
|
||||
actor.localToStageCoordinates(coords)
|
||||
val tileGroup = toTileGroup(coords)
|
||||
if (tileGroup != null)
|
||||
return onTileLongClicked(tileGroup.tileInfo)
|
||||
return false
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
@ -244,26 +213,6 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun onTileLongClicked(tileInfo: TileInfo): Boolean {
|
||||
|
||||
unitActionOverlay?.remove()
|
||||
selectedTile = tileInfo
|
||||
val selectedUnit = worldScreen.bottomUnitTable.selectedUnit
|
||||
worldScreen.bottomUnitTable.tileSelected(tileInfo)
|
||||
worldScreen.shouldUpdate = true
|
||||
|
||||
if (selectedUnit != null) {
|
||||
addOverlayOnTileGroup(tileInfo, UnitContextMenu(this, selectedUnit, tileInfo))
|
||||
// don't activate the regular tile click after a long-press,
|
||||
// that makes the long-press basically worthless
|
||||
(tileGroups[tileInfo]!!.listeners.first { it is ClickListener }!! as ClickListener).cancel()
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
private fun addOverlayOnTileGroup(tileInfo: TileInfo, actor: Actor) {
|
||||
|
||||
val group = tileGroups[tileInfo]!!
|
||||
|
Loading…
x
Reference in New Issue
Block a user