Inital project

This commit is contained in:
2026-05-22 23:25:13 -05:00
commit b7defbdbfc
243 changed files with 5718 additions and 0 deletions

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

View File

@@ -0,0 +1 @@
uid://01x0fo4llt5v

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