straywild/tests/camera_drag_validation.gd

61 lines
1.9 KiB
GDScript3
Raw Normal View History

2026-08-16 16:39:52 -04:00
extends SceneTree
const PlayerScene: PackedScene = preload("res://player/player.tscn")
func _initialize() -> void:
call_deferred("_run")
func _run() -> void:
root.size = Vector2i(1280, 720)
var player := PlayerScene.instantiate() as Player
root.add_child(player)
await process_frame
player.local_control_enabled = true
player.set_camera_input_enabled(true)
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
var press := InputEventMouseButton.new()
press.button_index = MOUSE_BUTTON_RIGHT
press.button_mask = MOUSE_BUTTON_MASK_RIGHT
press.pressed = true
Input.parse_input_event(press)
await process_frame
2026-08-16 16:39:52 -04:00
assert(bool(player.get("_camera_dragging")))
if DisplayServer.get_name() != "headless":
assert(Input.mouse_mode == Input.MOUSE_MODE_CAPTURED)
2026-08-16 16:39:52 -04:00
var yaw := player.get_node("%CameraYaw") as Node3D
var previous_yaw: float = yaw.rotation.y
var motion := InputEventMouseMotion.new()
motion.button_mask = MOUSE_BUTTON_MASK_RIGHT
motion.relative = Vector2(18.0, -4.0)
motion.screen_relative = motion.relative
Input.parse_input_event(motion)
2026-08-16 16:39:52 -04:00
await process_frame
assert(not is_equal_approx(yaw.rotation.y, previous_yaw))
2026-08-16 16:39:52 -04:00
assert(bool(player.get("_camera_dragging")))
if DisplayServer.get_name() != "headless":
assert(Input.mouse_mode == Input.MOUSE_MODE_CAPTURED)
var release := InputEventMouseButton.new()
release.button_index = MOUSE_BUTTON_RIGHT
release.pressed = false
Input.parse_input_event(release)
await process_frame
2026-08-16 16:39:52 -04:00
assert(not bool(player.get("_camera_dragging")))
if DisplayServer.get_name() != "headless":
assert(Input.mouse_mode == Input.MOUSE_MODE_VISIBLE)
Input.parse_input_event(press)
await process_frame
2026-08-16 16:39:52 -04:00
assert(bool(player.get("_camera_dragging")))
player.notification(NOTIFICATION_APPLICATION_FOCUS_OUT)
assert(not bool(player.get("_camera_dragging")))
player.queue_free()
await process_frame
print("Camera drag validation: PASS")
quit()