Inital project

This commit is contained in:
2026-05-22 23:28:18 -05:00
commit 605bfff1d1
250 changed files with 5930 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
class_name Player
extends CharacterBody2D
@onready var player_menu: CanvasLayer = %PlayerMenu
@onready var username_label: Label = %UsernameLabel
@onready var sprite: Sprite2D = %Sprite
@onready var camera: Camera2D = %Camera
@export var walk_speed = 500.0
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():
chat = GameManager.chat_node
chat.chat_input.text_submitted.connect(_on_text_submitted)
camera.make_current()
else:
set_process(false)
set_physics_process(false)
#voice_chat.set_multiplayer_authority(name.to_int())
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
sprite.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
sprite.texture = player_info.avatar
func _physics_process(delta: float) -> void:
if !menu_open:
var direction := Input.get_vector("left", "right", "forward", "backwards")
if direction:
velocity = direction * walk_speed
else:
velocity.x = move_toward(velocity.x, 0, walk_speed)
velocity.y = move_toward(velocity.y, 0, walk_speed)
move_and_slide()
func _on_text_submitted(text: String):
if is_multiplayer_authority():
chat.send_message(player_info.username, player_info.avatar_modulated_color)
func _process(delta: float) -> void:
if Input.is_action_just_pressed("menu") and !player_menu.visible and !chat.visible:
player_menu.show()
menu_open = true
elif Input.is_action_just_pressed("menu") and player_menu.visible:
player_menu.hide()
menu_open = false
if is_multiplayer_authority():
if Input.is_action_just_pressed("toggle_chat") and !chat.visible and !player_menu.visible:
menu_open = true
chat.update_visiblity(true, menu_open)
elif Input.is_action_just_pressed("menu") and chat.visible:
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()
chat.chat_input.grab_focus()
menu_open = true

View File

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

View File

@@ -0,0 +1,51 @@
[gd_scene format=3 uid="uid://coomlq1nbp7aw"]
[ext_resource type="Script" uid="uid://b0f6yhfyjsqs" 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"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8afob"]
size = Vector2(100, 100)
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_gmlin"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
[node name="Player" type="CharacterBody2D" unique_id=2081549557]
script = ExtResource("1_8afob")
[node name="Sprite" type="Sprite2D" parent="." unique_id=1634085200]
unique_name_in_owner = true
texture = ExtResource("3_gmlin")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=206749953]
shape = SubResource("RectangleShape2D_8afob")
[node name="UsernameLabel" type="Label" parent="." unique_id=613634768]
unique_name_in_owner = true
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -176.0
offset_top = -93.425
offset_right = 176.0
offset_bottom = -70.425
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
text = "username"
horizontal_alignment = 1
[node name="PlayerMenu" parent="." unique_id=1711189995 instance=ExtResource("2_dovo2")]
unique_name_in_owner = true
visible = false
[node name="Camera" type="Camera2D" parent="." unique_id=2093624054]
unique_name_in_owner = true
zoom = Vector2(0.8, 0.8)
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=1516753759]
replication_config = SubResource("SceneReplicationConfig_gmlin")

View File

@@ -0,0 +1,121 @@
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_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/player3d.gd" id="1_qd3o8"]
[ext_resource type="PackedScene" uid="uid://dg55eimlsqgp7" path="res://scenes/ui/player_menu.tscn" id="2_4sc7w"]
[ext_resource type="Texture2D" uid="uid://blpnie21uplx7" path="res://icon.svg" id="3_bjl6v"]
[ext_resource type="PackedScene" uid="uid://brnbhj2m3shio" path="res://scenes/voice_chat/voice_chat.tscn" id="4_jvty1"]
[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_qd3o8")
[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_4sc7w")]
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_bjl6v")
[node name="VoiceChat" parent="." unique_id=2044163417 instance=ExtResource("4_jvty1")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5744768, 0)