Inital project
This commit is contained in:
124
3d_mp_base/scenes/player/player.gd
Normal file
124
3d_mp_base/scenes/player/player.gd
Normal file
@@ -0,0 +1,124 @@
|
||||
class_name Player
|
||||
extends CharacterBody3D
|
||||
|
||||
@onready var camera: Camera3D = %Camera
|
||||
@onready var head: Node3D = %Head
|
||||
@onready var player_menu: CanvasLayer = %PlayerMenu
|
||||
@onready var username_label: Label3D = %UsernameLabel
|
||||
@onready var avatar_image: Sprite3D = %AvatarImage
|
||||
@onready var spawn_point: Marker3D = %SpawnPoint
|
||||
@onready var voice_chat = %VoiceChat
|
||||
|
||||
@export var sensitivity: float = 0.002
|
||||
@export var SPEED := 5.0
|
||||
@export var JUMP_VELOCITY := 4.5
|
||||
|
||||
var player_info := PlayerInfoResource.new()
|
||||
var menu_open: bool = false
|
||||
var chat: Chat
|
||||
|
||||
func _enter_tree() -> void:
|
||||
set_multiplayer_authority(int(name))
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group("Players")
|
||||
player_menu.hide()
|
||||
|
||||
if is_multiplayer_authority():
|
||||
camera.current = true
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
chat = GameManager.chat_node
|
||||
chat.chat_input.text_submitted.connect(_on_text_submitted)
|
||||
else:
|
||||
set_process(false)
|
||||
set_physics_process(false)
|
||||
voice_chat.set_multiplayer_authority(name.to_int())
|
||||
|
||||
|
||||
func set_player_info_enet():
|
||||
username_label.text = player_info.username
|
||||
|
||||
|
||||
func set_player_info_steam(steam_id: int):
|
||||
player_info.init_steam(name.to_int(), Steam.getFriendPersonaName(steam_id), await Steamworks.get_player_avatar(steam_id), steam_id)
|
||||
|
||||
username_label.text = player_info.username
|
||||
avatar_image.texture = player_info.avatar
|
||||
|
||||
|
||||
func set_player_info_ip(username: String, avatar_bytes: PackedByteArray):
|
||||
player_info.init_enet(name.to_int(), username, avatar_bytes)
|
||||
|
||||
username_label.text = player_info.username
|
||||
avatar_image.texture = player_info.avatar
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not is_on_floor():
|
||||
velocity += get_gravity() * delta
|
||||
|
||||
var input_dir
|
||||
var direction
|
||||
|
||||
if !menu_open:
|
||||
if Input.is_action_just_pressed("jump") and is_on_floor():
|
||||
velocity.y = JUMP_VELOCITY
|
||||
|
||||
input_dir = Input.get_vector("left", "right", "forward", "backwards")
|
||||
direction = (head.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||
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)
|
||||
|
||||
move_and_slide()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Input.is_action_just_pressed("menu") and !player_menu.visible and !chat.visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
player_menu.show()
|
||||
menu_open = true
|
||||
elif Input.is_action_just_pressed("menu") and player_menu.visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
player_menu.hide()
|
||||
menu_open = false
|
||||
|
||||
if Input.is_action_just_released("interact") and !menu_open:
|
||||
if multiplayer.is_server():
|
||||
GameManager._spawn_ball(spawn_point.global_position, 1)
|
||||
else:
|
||||
GameManager.request_spawn_ball.rpc(spawn_point.global_position)
|
||||
|
||||
|
||||
if is_multiplayer_authority():
|
||||
if Input.is_action_just_pressed("toggle_chat") and !chat.visible and !player_menu.visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
menu_open = true
|
||||
chat.update_visiblity(true, menu_open)
|
||||
elif Input.is_action_just_pressed("menu") and chat.visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
menu_open = false
|
||||
chat.update_visiblity(false, menu_open)
|
||||
elif Input.is_action_just_pressed("toggle_chat") and chat.visible and chat.new_message_timer.time_left > 0:
|
||||
chat.new_message_timer.stop()
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
chat.chat_input.grab_focus()
|
||||
menu_open = true
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if !is_multiplayer_authority(): return
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
head.rotate_y(-event.relative.x * sensitivity)
|
||||
camera.rotate_x(-event.relative.y * sensitivity)
|
||||
camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-90), deg_to_rad(90))
|
||||
|
||||
|
||||
func _on_text_submitted(text: String):
|
||||
if is_multiplayer_authority():
|
||||
chat.send_message(player_info.username, player_info.avatar_modulated_color)
|
||||
1
3d_mp_base/scenes/player/player.gd.uid
Normal file
1
3d_mp_base/scenes/player/player.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://01x0fo4llt5v
|
||||
68
3d_mp_base/scenes/player/player.tscn
Normal file
68
3d_mp_base/scenes/player/player.tscn
Normal file
@@ -0,0 +1,68 @@
|
||||
[gd_scene format=3 uid="uid://cq6ovfsdvnt40"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://01x0fo4llt5v" path="res://scenes/player/player.gd" id="1_8afob"]
|
||||
[ext_resource type="PackedScene" uid="uid://dg55eimlsqgp7" path="res://scenes/ui/player_menu.tscn" id="2_dovo2"]
|
||||
[ext_resource type="Texture2D" uid="uid://blpnie21uplx7" path="res://icon.svg" id="3_gmlin"]
|
||||
[ext_resource type="PackedScene" uid="uid://brnbhj2m3shio" path="res://scenes/voice_chat/voice_chat.tscn" id="4_lvxji"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_dovo2"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8afob"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_8afob"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_dovo2"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath("Head:rotation")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
|
||||
[node name="Player" type="CharacterBody3D" unique_id=2050060387]
|
||||
script = ExtResource("1_8afob")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=768435836]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
mesh = SubResource("CapsuleMesh_dovo2")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=587703821]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("CapsuleShape3D_8afob")
|
||||
|
||||
[node name="Head" type="Node3D" parent="." unique_id=719581770]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Head" unique_id=943825045]
|
||||
transform = Transform3D(0.5631333, 0, 0, 0, 0.17207867, 0, 0, 0, 0.6267885, 0, 1.5652028, -0.2335369)
|
||||
mesh = SubResource("BoxMesh_8afob")
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="Head" unique_id=1626643721]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5604866, -0.2544498)
|
||||
|
||||
[node name="SpawnPoint" type="Marker3D" parent="Head" unique_id=102541278]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.354382, -1.436083)
|
||||
|
||||
[node name="PlayerMenu" parent="." unique_id=1711189995 instance=ExtResource("2_dovo2")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=1968705201]
|
||||
replication_config = SubResource("SceneReplicationConfig_dovo2")
|
||||
|
||||
[node name="UsernameLabel" type="Label3D" parent="." unique_id=1985946962]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.226443, 0)
|
||||
billboard = 2
|
||||
text = "Player ID"
|
||||
|
||||
[node name="AvatarImage" type="Sprite3D" parent="." unique_id=1019124351]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 2.5678127, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("3_gmlin")
|
||||
|
||||
[node name="VoiceChat" parent="." unique_id=2044163417 instance=ExtResource("4_lvxji")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5744768, 0)
|
||||
Reference in New Issue
Block a user