diff --git a/CameraMode/CameraMode.gd b/CameraMode/CameraMode.gd deleted file mode 100644 index 66ea682..0000000 --- a/CameraMode/CameraMode.gd +++ /dev/null @@ -1,69 +0,0 @@ -extends Node3D - -@export var camera_speed := 10 -@export var mouse_sensitivity := 0.01 - -@onready var camera: Camera3D -@onready var _cached_camera: Camera3D -@onready var _enabled := false - - -func _ready() -> void: - if OS.is_debug_build(): - _enabled = true - set_process(_enabled) - set_process_input(_enabled) - - -func _input(event: InputEvent) -> void: - if event is InputEventKey: - if event.is_pressed() and not event.is_echo(): - if event.keycode == KEY_F10: - _toggle_camera_mode() - - -func _process(delta: float) -> void: - if not visible: - return - - var movement := Vector3.ZERO - movement += Vector3.FORWARD if Input.is_key_pressed(KEY_W) else Vector3.ZERO - movement += Vector3.LEFT if Input.is_key_pressed(KEY_A) else Vector3.ZERO - movement += Vector3.BACK if Input.is_key_pressed(KEY_S) else Vector3.ZERO - movement += Vector3.RIGHT if Input.is_key_pressed(KEY_D) else Vector3.ZERO - movement += Vector3.DOWN if Input.is_key_pressed(KEY_Q) else Vector3.ZERO - movement += Vector3.UP if Input.is_key_pressed(KEY_E) else Vector3.ZERO - - var rotation_input = -Input.get_last_mouse_velocity().x * mouse_sensitivity - var tilt_input = -Input.get_last_mouse_velocity().y * mouse_sensitivity - - var euler_rotation = camera.global_transform.basis.get_euler() - euler_rotation.x += tilt_input * delta - euler_rotation.x = clamp(euler_rotation.x, -PI + 0.01, PI - 0.01) - euler_rotation.y += rotation_input * delta - camera.global_transform.basis = Basis.from_euler(euler_rotation) - - camera.global_position += camera.global_transform.basis * movement * delta * camera_speed - - -func _toggle_camera_mode() -> void: - if visible: - get_tree().paused = false - _cached_camera.current = true - camera.queue_free() - hide() - - for node in get_tree().get_nodes_in_group("camera_mode_toggle"): - node.show() - else: - get_tree().paused = true - _cached_camera = get_viewport().get_camera_3d() - camera = Camera3D.new() - add_child(camera) - camera.current = true - show() - camera.fov = _cached_camera.fov - camera.global_transform = _cached_camera.global_transform - - for node in get_tree().get_nodes_in_group("camera_mode_toggle"): - node.hide() diff --git a/CameraMode/CameraMode.tscn b/CameraMode/CameraMode.tscn deleted file mode 100644 index 38c5d8b..0000000 --- a/CameraMode/CameraMode.tscn +++ /dev/null @@ -1,9 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://q3osrwkgcbi0"] - -[ext_resource type="Script" path="res://CameraMode/CameraMode.gd" id="1_iqqgo"] - -[node name="CameraMode" type="Node3D"] -process_mode = 3 -visible = false -script = ExtResource("1_iqqgo") -mouse_sensitivity = 0.001 diff --git a/PhotoMode/PhotoMode.gd b/PhotoMode/PhotoMode.gd new file mode 100644 index 0000000..a8d0edd --- /dev/null +++ b/PhotoMode/PhotoMode.gd @@ -0,0 +1,66 @@ +extends Node3D + +@export var camera_speed := 15.0 +@export var mouse_sensitivity := 0.005 + +var is_active := false + +var _camera_photo: Camera3D +var _camera_previous: Camera3D + + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_ALWAYS + set_process_input(OS.is_debug_build()) + set_process(false) + + +func _input(event: InputEvent) -> void: + if event is InputEventKey and event.keycode == KEY_F10: + if event.is_pressed() and not event.is_echo(): + _toggle_camera_mode() + + +func _process(delta: float) -> void: + var speed_multiplier := 1.0 + float(Input.is_key_pressed(KEY_SHIFT)) * 3.0 + + var direction := Vector3.ZERO + direction += Vector3.FORWARD if Input.is_key_pressed(KEY_W) else Vector3.ZERO + direction += Vector3.LEFT if Input.is_key_pressed(KEY_A) else Vector3.ZERO + direction += Vector3.BACK if Input.is_key_pressed(KEY_S) else Vector3.ZERO + direction += Vector3.RIGHT if Input.is_key_pressed(KEY_D) else Vector3.ZERO + direction += Vector3.DOWN if Input.is_key_pressed(KEY_Q) else Vector3.ZERO + direction += Vector3.UP if Input.is_key_pressed(KEY_E) else Vector3.ZERO + + #TODO: issue, this is past mouse velocity, thereÅ› lag, is it due to it? + var rotation_input = -Input.get_last_mouse_velocity().x * mouse_sensitivity + var tilt_input = -Input.get_last_mouse_velocity().y * mouse_sensitivity + + var euler_rotation = _camera_photo.global_transform.basis.get_euler() + euler_rotation.x += tilt_input * delta + euler_rotation.x = clamp(euler_rotation.x, -PI + 0.01, PI - 0.01) + euler_rotation.y += rotation_input * delta + _camera_photo.global_transform.basis = Basis.from_euler(euler_rotation) + + _camera_photo.global_position += _camera_photo.global_transform.basis * direction * delta * camera_speed *speed_multiplier + + +func _toggle_camera_mode() -> void: + is_active = not is_active + set_process(is_active) + get_tree().paused = is_active + + for node in get_tree().get_nodes_in_group("camera_mode_toggle"): + node.visible = not is_active + + if is_active: + _camera_previous = get_viewport().get_camera_3d() + _camera_photo = Camera3D.new() + add_child(_camera_photo) + _camera_photo.current = true + _camera_photo.fov = _camera_previous.fov + _camera_photo.global_transform = _camera_previous.global_transform + + else: + _camera_previous.current = true + _camera_photo.queue_free() diff --git a/PhotoMode/PhotoMode.tscn b/PhotoMode/PhotoMode.tscn new file mode 100644 index 0000000..63274f9 --- /dev/null +++ b/PhotoMode/PhotoMode.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://dgbsqo65v7aof"] + +[ext_resource type="Script" path="res://PhotoMode/PhotoMode.gd" id="1_2h2of"] + +[node name="PhotoMode" type="Node3D"] +process_mode = 3 +script = ExtResource("1_2h2of") diff --git a/PhotoMode/PhotoMode.tscn.depren b/PhotoMode/PhotoMode.tscn.depren new file mode 100644 index 0000000..4f8104f --- /dev/null +++ b/PhotoMode/PhotoMode.tscn.depren @@ -0,0 +1,3 @@ +[gd_scene load_steps=2 format=3] + +[ext_resource type="Script" path="res://PhotoMode/PhotoMode.gd" id="1_iqqgo"] diff --git a/project.godot b/project.godot index 0cdda32..c49c3e5 100644 --- a/project.godot +++ b/project.godot @@ -52,7 +52,7 @@ config/icon="res://icon.png" [autoload] -CameraMode="*res://CameraMode/CameraMode.tscn" +PhotoMode="*res://PhotoMode/PhotoMode.tscn" [display]