|
|
|
@ -45,9 +45,15 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context
|
|
|
|
|
private val overlayButtons: MutableSet<InputOverlayDrawableButton> = HashSet()
|
|
|
|
|
private val overlayDpads: MutableSet<InputOverlayDrawableDpad> = HashSet()
|
|
|
|
|
private val overlayJoysticks: MutableSet<InputOverlayDrawableJoystick> = HashSet()
|
|
|
|
|
|
|
|
|
|
private var inEditMode = false
|
|
|
|
|
private var buttonBeingConfigured: InputOverlayDrawableButton? = null
|
|
|
|
|
private var dpadBeingConfigured: InputOverlayDrawableDpad? = null
|
|
|
|
|
private var joystickBeingConfigured: InputOverlayDrawableJoystick? = null
|
|
|
|
|
|
|
|
|
|
private val preferences: SharedPreferences =
|
|
|
|
|
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
|
|
|
|
|
|
|
|
|
|
private val gyro = FloatArray(3)
|
|
|
|
|
private val accel = FloatArray(3)
|
|
|
|
|
private var motionTimestamp: Long = 0
|
|
|
|
@ -114,7 +120,7 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context
|
|
|
|
|
}
|
|
|
|
|
NativeLibrary.onGamePadButtonEvent(
|
|
|
|
|
NativeLibrary.Player1Device,
|
|
|
|
|
button.id,
|
|
|
|
|
button.buttonId,
|
|
|
|
|
button.status
|
|
|
|
|
)
|
|
|
|
|
shouldUpdateView = true
|
|
|
|
@ -224,8 +230,109 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun onTouchWhileEditing(event: MotionEvent?): Boolean {
|
|
|
|
|
// TODO: Reimplement this
|
|
|
|
|
private fun onTouchWhileEditing(event: MotionEvent): Boolean {
|
|
|
|
|
val pointerIndex = event.actionIndex
|
|
|
|
|
val fingerPositionX = event.getX(pointerIndex).toInt()
|
|
|
|
|
val fingerPositionY = event.getY(pointerIndex).toInt()
|
|
|
|
|
|
|
|
|
|
// TODO: Provide support for portrait layout
|
|
|
|
|
//val orientation =
|
|
|
|
|
// if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) "-Portrait" else ""
|
|
|
|
|
|
|
|
|
|
for (button in overlayButtons) {
|
|
|
|
|
// Determine the button state to apply based on the MotionEvent action flag.
|
|
|
|
|
when (event.action and MotionEvent.ACTION_MASK) {
|
|
|
|
|
MotionEvent.ACTION_DOWN,
|
|
|
|
|
MotionEvent.ACTION_POINTER_DOWN ->
|
|
|
|
|
// If no button is being moved now, remember the currently touched button to move.
|
|
|
|
|
if (buttonBeingConfigured == null &&
|
|
|
|
|
button.bounds.contains(
|
|
|
|
|
fingerPositionX,
|
|
|
|
|
fingerPositionY
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
buttonBeingConfigured = button
|
|
|
|
|
buttonBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_MOVE -> if (buttonBeingConfigured != null) {
|
|
|
|
|
buttonBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
invalidate()
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_UP,
|
|
|
|
|
MotionEvent.ACTION_POINTER_UP -> if (buttonBeingConfigured === button) {
|
|
|
|
|
// Persist button position by saving new place.
|
|
|
|
|
saveControlPosition(
|
|
|
|
|
buttonBeingConfigured!!.buttonId,
|
|
|
|
|
buttonBeingConfigured!!.bounds.centerX(),
|
|
|
|
|
buttonBeingConfigured!!.bounds.centerY(),
|
|
|
|
|
""
|
|
|
|
|
)
|
|
|
|
|
buttonBeingConfigured = null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (dpad in overlayDpads) {
|
|
|
|
|
// Determine the button state to apply based on the MotionEvent action flag.
|
|
|
|
|
when (event.action and MotionEvent.ACTION_MASK) {
|
|
|
|
|
MotionEvent.ACTION_DOWN,
|
|
|
|
|
MotionEvent.ACTION_POINTER_DOWN ->
|
|
|
|
|
// If no button is being moved now, remember the currently touched button to move.
|
|
|
|
|
if (buttonBeingConfigured == null &&
|
|
|
|
|
dpad.bounds.contains(fingerPositionX, fingerPositionY)
|
|
|
|
|
) {
|
|
|
|
|
dpadBeingConfigured = dpad
|
|
|
|
|
dpadBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_MOVE -> if (dpadBeingConfigured != null) {
|
|
|
|
|
dpadBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
invalidate()
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_UP,
|
|
|
|
|
MotionEvent.ACTION_POINTER_UP -> if (dpadBeingConfigured === dpad) {
|
|
|
|
|
// Persist button position by saving new place.
|
|
|
|
|
saveControlPosition(
|
|
|
|
|
dpadBeingConfigured!!.upId,
|
|
|
|
|
dpadBeingConfigured!!.bounds.centerX(),
|
|
|
|
|
dpadBeingConfigured!!.bounds.centerY(),
|
|
|
|
|
""
|
|
|
|
|
)
|
|
|
|
|
dpadBeingConfigured = null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (joystick in overlayJoysticks) {
|
|
|
|
|
when (event.action) {
|
|
|
|
|
MotionEvent.ACTION_DOWN,
|
|
|
|
|
MotionEvent.ACTION_POINTER_DOWN -> if (joystickBeingConfigured == null &&
|
|
|
|
|
joystick.bounds.contains(
|
|
|
|
|
fingerPositionX,
|
|
|
|
|
fingerPositionY
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
joystickBeingConfigured = joystick
|
|
|
|
|
joystickBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_MOVE -> if (joystickBeingConfigured != null) {
|
|
|
|
|
joystickBeingConfigured!!.onConfigureTouch(event)
|
|
|
|
|
invalidate()
|
|
|
|
|
}
|
|
|
|
|
MotionEvent.ACTION_UP,
|
|
|
|
|
MotionEvent.ACTION_POINTER_UP -> if (joystickBeingConfigured != null) {
|
|
|
|
|
saveControlPosition(
|
|
|
|
|
joystickBeingConfigured!!.buttonId,
|
|
|
|
|
joystickBeingConfigured!!.bounds.centerX(),
|
|
|
|
|
joystickBeingConfigured!!.bounds.centerY(),
|
|
|
|
|
""
|
|
|
|
|
)
|
|
|
|
|
joystickBeingConfigured = null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|