Normalize cursor handoff across gameplay menus
This commit is contained in:
parent
6578d3e870
commit
3be79fa3fc
5 changed files with 71 additions and 10 deletions
|
|
@ -1559,11 +1559,14 @@ func open_menu() -> void:
|
|||
_cancel_page_tween()
|
||||
_prior_movement_enabled = _player.is_movement_enabled()
|
||||
_prior_camera_input_enabled = _player.is_camera_input_enabled()
|
||||
_prior_mouse_mode = Input.mouse_mode
|
||||
_player.set_movement_enabled(false)
|
||||
# Ending an active right-click camera drag restores its ordinary pointer
|
||||
# mode. Snapshot after that handoff so this menu never restores the drag's
|
||||
# transient captured mode when it closes.
|
||||
_player.set_camera_input_enabled(false)
|
||||
_prior_mouse_mode = _get_restorable_mouse_mode(Input.mouse_mode)
|
||||
_control_snapshot_stored = true
|
||||
_mouse_snapshot_stored = true
|
||||
_player.set_movement_enabled(false)
|
||||
_player.set_camera_input_enabled(false)
|
||||
_fishing_spot.set_local_menu_input_suppressed(INPUT_OWNER, true)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
visible = true
|
||||
|
|
@ -1775,6 +1778,16 @@ func _apply_mouse_close_policy(reason: CloseReason) -> void:
|
|||
_mouse_snapshot_stored = false
|
||||
|
||||
|
||||
func _get_restorable_mouse_mode(mouse_mode: Input.MouseMode) -> Input.MouseMode:
|
||||
# Mouse capture belongs to an in-progress camera drag, never to the player
|
||||
# menu itself. A held right button can be released while this menu owns
|
||||
# input, so restoring CAPTURED here would leave the pointer hidden without
|
||||
# an active drag to release it.
|
||||
if mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
return Input.MOUSE_MODE_VISIBLE
|
||||
return mouse_mode
|
||||
|
||||
|
||||
func _on_bite_activated() -> void:
|
||||
if visible:
|
||||
close_menu(CloseReason.BITE_STARTED)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue