Merge multiplayer to dev branch #2

Merged
chrisbell merged 21 commits from multiplayer into develop 2025-08-07 22:06:02 +00:00
5 changed files with 170 additions and 5 deletions
Showing only changes of commit 003fae1d3a - Show all commits

View File

@@ -1,8 +1,8 @@
[gd_scene load_steps=7 format=3 uid="uid://bj52j4ew2lfr6"] [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://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://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"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_f73ky"]
@@ -25,6 +25,15 @@ shadow_enabled = true
[node name="Human-height-reference" parent="." instance=ExtResource("1_yyu2g")] [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) 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="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)

View File

@@ -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"

55
splunk/player/player.gd Normal file
View File

@@ -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)

View File

@@ -0,0 +1 @@
uid://dopyfulbw2mx5

View File

@@ -28,6 +28,39 @@ folder_colors={
"res://tools/": "gray" "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] [physics]
3d/physics_engine="Jolt Physics" 3d/physics_engine="Jolt Physics"