From 29a0c0a88948a70ff9a07bd8043b7c0e0253cfcd Mon Sep 17 00:00:00 2001 From: lucastucious Date: Fri, 18 Jul 2025 01:30:39 +0200 Subject: [PATCH] cam rotation --- Core/player.gd | 22 +++++++++++++++++++--- Core/player.tscn | 17 +++++++++++++++-- Maps/gym.tscn | 1 + project.godot | 9 ++++++++- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/Core/player.gd b/Core/player.gd index cd0ae51..2a34c72 100644 --- a/Core/player.gd +++ b/Core/player.gd @@ -4,7 +4,7 @@ extends Node3D @onready var move_speed: float = ProjectSettings.get_setting("game/controls/camera_move_speed",20.0) @onready var zoom_speed: float = ProjectSettings.get_setting("game/controls/camera_zoom_speed",20.0) @export_category("Limits") -@export_range(-10,10,1) var zoom_min: float = -8 +@export_range(-10,10,1) var zoom_min: float = -4 @export_range(11,50,1) var zoom_max: float = 20 @export_range(0,0.95,0.01) var zoom_speed_damp: float = 0.5 @@ -14,10 +14,11 @@ extends Node3D @onready var socket: Node3D = $camera_point @onready var cam : Camera3D = %camera_player -var zoom_direction : float = 0.0 ## 0.0 means no zoom. Use 1.0 for moving toward the floor +var zoom_direction : float = 0.0 # if different than zero, zoom is happening var move_disabled:bool = false var zoom_disabled:bool = false var edge_scroll_disabled:bool = ProjectSettings.get_setting("game/controls/edge_scrolling_disabled",false) +var rotation_mode:bool = false #endregion @@ -30,6 +31,12 @@ func _process(delta: float) -> void: cam_move(delta) cam_zoom(delta) cam_edge_scroll(delta) + cam_rotation(delta) + if rotation_mode: + print(Input.get_last_mouse_velocity()) + rotation.y += Input.get_last_mouse_velocity().x / 10000 * -1 #TODO: REMOVE MAGIC NUMBERS + print(rotation.z + Input.get_last_mouse_velocity().y / 10000 * -1) + rotation.z = clamp(rotation.z + Input.get_last_mouse_velocity().y / 10000 * -1,-0.75,0.35) func _unhandled_input(event: InputEvent) -> void: @@ -37,6 +44,12 @@ func _unhandled_input(event: InputEvent) -> void: zoom_direction = -1 if event.is_action("scroll_down"): zoom_direction = 1 + if event.is_action_pressed("rotation_mode"): + rotation_mode = true + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + if event.is_action_released("rotation_mode"): + rotation_mode = false + Input.mouse_mode = Input.MOUSE_MODE_CONFINED #region Getter @@ -72,7 +85,6 @@ func cam_zoom(delta:float) -> void: if zoom_disabled:return var new_zoom: float = clamp(cam.position.z + zoom_speed * zoom_direction * delta,zoom_min,zoom_max) - print(new_zoom) cam.position.z = new_zoom zoom_direction *= zoom_speed_damp #Smooth the deceleration @@ -97,4 +109,8 @@ func cam_edge_scroll(delta:float) -> void: var pan_vector:= Vector2(pan_direction.x,pan_direction.y) * delta * edge_scrolling_speed * get_zoom_factor() translate_object_local(Vector3(pan_vector.y,0,pan_vector.x)) + + +func cam_rotation(delta:float) -> void: + pass #endregion diff --git a/Core/player.tscn b/Core/player.tscn index a830c0c..1da3ab1 100644 --- a/Core/player.tscn +++ b/Core/player.tscn @@ -1,12 +1,25 @@ -[gd_scene load_steps=2 format=3 uid="uid://djj1fc8qm10t6"] +[gd_scene load_steps=4 format=3 uid="uid://djj1fc8qm10t6"] [ext_resource type="Script" uid="uid://c23s1syo7wjm8" path="res://Core/player.gd" id="1_e571r"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e571r"] +blend_mode = 1 +no_depth_test = true +albedo_color = Color(1, 0, 0.15294115, 1) +proximity_fade_enabled = true +proximity_fade_distance = 2.0 + +[sub_resource type="SphereMesh" id="SphereMesh_ipmo0"] +material = SubResource("StandardMaterial3D_e571r") + [node name="player_root" type="Node3D"] script = ExtResource("1_e571r") [node name="camera_point" type="Node3D" parent="."] -transform = Transform3D(-4.371139e-08, 0.57357645, -0.81915206, 0, 0.81915206, 0.57357645, 1, 2.5071824e-08, -3.5806274e-08, -2, 6.452, 0) +transform = Transform3D(-4.371139e-08, 0.57357645, -0.81915206, 0, 0.81915206, 0.57357645, 1, 2.5071824e-08, -3.5806274e-08, -4.4828167, 2.9061706, -1.0852736e-07) [node name="camera_player" type="Camera3D" parent="camera_point"] unique_name_in_owner = true + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("SphereMesh_ipmo0") diff --git a/Maps/gym.tscn b/Maps/gym.tscn index 9c4c1e9..75029a2 100644 --- a/Maps/gym.tscn +++ b/Maps/gym.tscn @@ -102,6 +102,7 @@ shape = SubResource("ConvexPolygonShape3D_afokq") [node name="player_root" parent="." instance=ExtResource("8_mqp7f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.6329784, 0, 0) +zoom_min = -4.0 zoom_speed_damp = 0.85 [node name="VoxelGI" type="VoxelGI" parent="."] diff --git a/project.godot b/project.godot index 3e4db1c..df59b54 100644 --- a/project.godot +++ b/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="Kenshi2" +config/tags=PackedStringArray("games") run/main_scene="uid://dnmetcwb14svi" config/features=PackedStringArray("4.5", "Forward Plus") config/icon="res://icon.svg" @@ -59,7 +60,7 @@ cam_right={ } scroll_up={ "deadzone": 0.2, -"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":8,"position":Vector2(58, 12),"global_position":Vector2(67, 58),"factor":1.0,"button_index":4,"canceled":false,"pressed":true,"double_click":false,"script":null) +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) ] } scroll_down={ @@ -67,6 +68,12 @@ scroll_down={ "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(681, 11),"global_position":Vector2(690, 57),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null) ] } +rotation_mode={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(98, 12),"global_position":Vector2(107, 60),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [physics]