straywild/tests/camera_drag_validation.gd

81 lines
2.8 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")))
var plain_wheel_down := InputEventMouseButton.new()
plain_wheel_down.button_index = MOUSE_BUTTON_WHEEL_DOWN
plain_wheel_down.pressed = true
var shifted_wheel_down := InputEventMouseButton.new()
shifted_wheel_down.button_index = MOUSE_BUTTON_WHEEL_DOWN
shifted_wheel_down.pressed = true
shifted_wheel_down.shift_pressed = true
player.apply_camera_settings(0.005, 2.5, false, false)
var default_zoom: float = float(player.get("_target_zoom"))
player._unhandled_input(plain_wheel_down)
assert(is_equal_approx(float(player.get("_target_zoom")), default_zoom))
player._unhandled_input(shifted_wheel_down)
assert(float(player.get("_target_zoom")) > default_zoom)
player.apply_camera_settings(0.005, 2.5, false, true)
var swapped_zoom: float = float(player.get("_target_zoom"))
player._unhandled_input(shifted_wheel_down)
assert(is_equal_approx(float(player.get("_target_zoom")), swapped_zoom))
player._unhandled_input(plain_wheel_down)
assert(float(player.get("_target_zoom")) > swapped_zoom)
2026-08-16 16:39:52 -04:00
player.queue_free()
await process_frame
print("Camera drag validation: PASS")
quit()