diff --git a/splunk/levels/lobby-scene/lobby.tscn b/splunk/levels/lobby-scene/lobby.tscn index 72e1d05..48b5862 100644 --- a/splunk/levels/lobby-scene/lobby.tscn +++ b/splunk/levels/lobby-scene/lobby.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=7 format=3 uid="uid://bj52j4ew2lfr6"] [ext_resource type="PackedScene" uid="uid://5vggmy1srgxb" path="res://tools/human-height-reference.tscn" id="1_yyu2g"] -[ext_resource type="PackedScene" uid="uid://daq1prwl8aaia" path="res://tools/debug.tscn" id="2_72fkp"] [ext_resource type="PackedScene" uid="uid://b5xb0fsfpn7r3" path="res://levels/lobby-scene/lobby-terrain.blend" id="3_f73ky"] +[ext_resource type="PackedScene" uid="uid://csmfxg011xisf" path="res://player/Player.tscn" id="4_0aw1h"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_f73ky"] @@ -25,6 +25,15 @@ shadow_enabled = true [node name="Human-height-reference" parent="." instance=ExtResource("1_yyu2g")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.33741, 0.953, -5.00694) -[node name="Debug" parent="." instance=ExtResource("2_72fkp")] - [node name="lobby-terrain" parent="." instance=ExtResource("3_f73ky")] + +[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."] +_spawnable_scenes = PackedStringArray("uid://csmfxg011xisf") +spawn_path = NodePath("../Marker3D") +spawn_limit = 1 + +[node name="Marker3D" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.269072, -8.35164) + +[node name="Player" parent="." instance=ExtResource("4_0aw1h")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.444747, 0.992996, -4.71496) diff --git a/splunk/player/Player.tscn b/splunk/player/Player.tscn index 66fd80b..9ba6de2 100644 --- a/splunk/player/Player.tscn +++ b/splunk/player/Player.tscn @@ -1,3 +1,70 @@ -[gd_scene format=3 uid="uid://csmfxg011xisf"] +[gd_scene load_steps=7 format=3 uid="uid://csmfxg011xisf"] -[node name="Player" type="Node3D"] +[ext_resource type="Script" uid="uid://dopyfulbw2mx5" path="res://player/player.gd" id="1_ulp21"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ehsmr"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_ulp21"] +radius = 0.3 +height = 1.5 + +[sub_resource type="PrismMesh" id="PrismMesh_3c3w1"] +size = Vector3(0.5, 0.5, 0.5) + +[sub_resource type="SphereMesh" id="SphereMesh_wnvi2"] + +[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_ulp21"] +properties/0/path = NodePath(".:position") +properties/0/spawn = true +properties/0/replication_mode = 2 +properties/1/path = NodePath(".:rotation") +properties/1/spawn = true +properties/1/replication_mode = 2 + +[node name="Player" type="CharacterBody3D"] +collision_layer = 2 +collision_mask = 3 +script = ExtResource("1_ulp21") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.399442, 0.0644827) +cull_mask = 1048573 +current = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_ehsmr") + +[node name="Mesh" type="Node3D" parent="."] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Mesh"] +transform = Transform3D(1, 0, 0, 0, 0.89961, 0, 0, 0, 1, 0, -0.318288, 0) +layers = 2 +mesh = SubResource("CapsuleMesh_ulp21") +skeleton = NodePath("../..") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Mesh"] +transform = Transform3D(1.41676, 0, 0, 0, 1.31718, 0, 0, 0, 1.22029, 0, 0.415995, 0) +layers = 2 +mesh = SubResource("PrismMesh_3c3w1") +skeleton = NodePath("../..") + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Mesh"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -0.0855882, 0.409407, 0.293333) +layers = 2 +mesh = SubResource("SphereMesh_wnvi2") +skeleton = NodePath("../..") + +[node name="MeshInstance3D4" type="MeshInstance3D" parent="Mesh"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.0770122, 0.409407, 0.293333) +layers = 2 +mesh = SubResource("SphereMesh_wnvi2") +skeleton = NodePath("../..") + +[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] +replication_config = SubResource("SceneReplicationConfig_ulp21") + +[node name="Label3D" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.887858, 0) +billboard = 1 +text = "Username" diff --git a/splunk/player/player.gd b/splunk/player/player.gd new file mode 100644 index 0000000..e93fa19 --- /dev/null +++ b/splunk/player/player.gd @@ -0,0 +1,55 @@ +extends CharacterBody3D + +@export var speed = 5.0 +@export var jump_velocity = 4.5 +@export var mouse_sensitivity = 0.002 + +var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") +var camera_node: Camera3D + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + camera_node = $Camera3D # Assuming Camera3D is a direct child + +func _physics_process(delta): + # Apply gravity + if not is_on_floor(): + velocity.y -= gravity * delta + + # Handle Jump + if Input.is_action_just_pressed("jump") and is_on_floor(): + velocity.y = jump_velocity + + # Get the input direction and apply movement + var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") + var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + + if is_on_floor(): + if direction: + velocity.x = direction.x * speed + velocity.z = direction.z * speed + else: + velocity.x = move_toward(velocity.x, 0, speed) + velocity.z = move_toward(velocity.z, 0, speed) + else: + # Air control + velocity.x = lerp(velocity.x, direction.x * speed, delta * 5.0) + velocity.z = lerp(velocity.z, direction.z * speed, delta * 5.0) + + move_and_slide() + +func _input(event): + if event is InputEventMouseMotion: + # Rotate the CharacterBody3D around the Y-axis for horizontal look + rotate_y(-event.relative.x * mouse_sensitivity) + + # Rotate the Camera3D around its local X-axis for vertical look + var change = -event.relative.y * mouse_sensitivity + var new_x_rotation = camera_node.rotation.x + change + camera_node.rotation.x = clamp(new_x_rotation, deg_to_rad(-90), deg_to_rad(90)) + + if event.is_action_pressed("ui_cancel"): # Typically Escape key + if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + else: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) diff --git a/splunk/player/player.gd.uid b/splunk/player/player.gd.uid new file mode 100644 index 0000000..ebc454e --- /dev/null +++ b/splunk/player/player.gd.uid @@ -0,0 +1 @@ +uid://dopyfulbw2mx5 diff --git a/splunk/project.godot b/splunk/project.godot index b3374d2..048f8a8 100644 --- a/splunk/project.godot +++ b/splunk/project.godot @@ -28,6 +28,39 @@ folder_colors={ "res://tools/": "gray" } +[input] + +move_left={ +"deadzone": 0.2, +"events": [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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.2, +"events": [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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +move_forward={ +"deadzone": 0.2, +"events": [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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +move_backward={ +"deadzone": 0.2, +"events": [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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.2, +"events": [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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +3d_render/layer_2="player" +3d_physics/layer_2="player" + [physics] 3d/physics_engine="Jolt Physics"