basic player controller
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
55
splunk/player/player.gd
Normal 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)
|
||||
1
splunk/player/player.gd.uid
Normal file
1
splunk/player/player.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dopyfulbw2mx5
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user