straywild/tests/camera_drag_validation.gd
Voyager 3b84bfe3a0 feat: expand progression and multiplayer systems
Add named save slots, progression import/export, and a unified play flow. Add live friend requests, presence, invitations, and relationship controls without durable discovery-server social storage. Advance the network protocol with isolated channels, movement reconciliation, late-join recovery, fishing replication, and animation synchronization. Preserve per-species catch totals, refine generated-world startup and water recovery, and complete the related input and interface improvements.
2026-08-23 20:49:54 -04:00

80 lines
2.8 KiB
GDScript

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
assert(bool(player.get("_camera_dragging")))
if DisplayServer.get_name() != "headless":
assert(Input.mouse_mode == Input.MOUSE_MODE_CAPTURED)
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)
await process_frame
assert(not is_equal_approx(yaw.rotation.y, previous_yaw))
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
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
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)
player.queue_free()
await process_frame
print("Camera drag validation: PASS")
quit()