copy from thegates-jam repo

This commit is contained in:
Nordup 2024-03-31 09:25:42 +04:00
parent c1a7ad74e1
commit 1a335de566
523 changed files with 22408 additions and 0 deletions

23
user_data/user_data.gd Normal file
View file

@ -0,0 +1,23 @@
extends Node
class_name UserData
signal speaking_changed(speaking: bool)
signal nickname_changed(nickname: String)
@export var speaking: bool:
set(value):
speaking = value
speaking_changed.emit(value)
@export var nickname: String:
set(value):
nickname = value
nickname_changed.emit(value)
var is_my_data: bool
var id: int
func _process(_delta: float) -> void:
if not is_multiplayer_authority(): return
speaking = Microphone.is_speaking

19
user_data/user_data.tscn Normal file
View file

@ -0,0 +1,19 @@
[gd_scene load_steps=3 format=3 uid="uid://dr5qcabhh7k8s"]
[ext_resource type="Script" path="res://user_data/user_data.gd" id="1_hoick"]
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_nr88d"]
properties/0/path = NodePath(".:speaking")
properties/0/spawn = true
properties/0/replication_mode = 2
properties/1/path = NodePath(".:nickname")
properties/1/spawn = true
properties/1/replication_mode = 2
[node name="UserData" type="Node"]
script = ExtResource("1_hoick")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_interval = 0.5
delta_interval = 0.5
replication_config = SubResource("SceneReplicationConfig_nr88d")

View file

@ -0,0 +1,24 @@
extends Resource
class_name UserDataEvents
signal user_data_spawned(id: int, user_data: UserData)
signal user_data_despawned(id: int)
signal user_volume_changed(id: int, volume: float)
var user_data_manager: UserDataManager
func set_user_data_manager(manager: UserDataManager) -> void:
user_data_manager = manager
func user_data_spawned_emit(id: int, user_data: UserData) -> void:
user_data_spawned.emit(id, user_data)
func user_data_despawned_emit(id: int) -> void:
user_data_despawned.emit(id)
func user_volume_changed_emit(id: int, volume: float) -> void:
user_volume_changed.emit(id, volume)

Binary file not shown.

View file

@ -0,0 +1,39 @@
extends Node
class_name UserDataManager
@export var user_data_spawner: UserDataSpawner
@export var user_data_events: UserDataEvents
var my_user_data: UserData
var user_datas = {} # {Peer ID: UserData}
func _ready() -> void:
if Connection.is_server(): return
user_data_events.set_user_data_manager(self)
user_data_spawner.user_data_spawned.connect(user_data_spawned)
user_data_spawner.user_data_despawned.connect(user_data_despawned)
func user_data_spawned(id: int, user_data: UserData) -> void:
if id == multiplayer.get_unique_id():
user_data.is_my_data = true
my_user_data = user_data
else:
user_datas[id] = user_data
user_data_events.user_data_spawned_emit(id, user_data)
func user_data_despawned(id: int) -> void:
if id == multiplayer.get_unique_id():
my_user_data = null
else:
user_datas.erase(id)
user_data_events.user_data_despawned_emit(id)
func try_get_user_data(id: int) -> UserData:
return user_datas[id] if user_datas.has(id) else null

View file

@ -0,0 +1,19 @@
[gd_scene load_steps=5 format=3 uid="uid://2ne27phhv0kl"]
[ext_resource type="Script" path="res://user_data/user_data_manager.gd" id="1_ncmb5"]
[ext_resource type="PackedScene" uid="uid://dr5qcabhh7k8s" path="res://user_data/user_data.tscn" id="2_uff5g"]
[ext_resource type="Resource" uid="uid://rclnl7v8k722" path="res://user_data/user_data_events.res" id="2_xtofl"]
[ext_resource type="Script" path="res://user_data/user_data_spawner.gd" id="3_2xjq6"]
[node name="UserDataManager" type="Node" node_paths=PackedStringArray("user_data_spawner")]
script = ExtResource("1_ncmb5")
user_data_spawner = NodePath("UserDataSpawner")
user_data_events = ExtResource("2_xtofl")
[node name="UserDatas" type="Node" parent="."]
[node name="UserDataSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("res://user_data/user_data.tscn")
spawn_path = NodePath("../UserDatas")
script = ExtResource("3_2xjq6")
user_data_scene = ExtResource("2_uff5g")

View file

@ -0,0 +1,47 @@
extends MultiplayerSpawner
class_name UserDataSpawner
signal user_data_spawned(id: int, user_data: UserData)
signal user_data_despawned(id: int)
@export var user_data_scene: PackedScene
func _ready() -> void:
spawn_function = custom_spawn
multiplayer.peer_connected.connect(create_user_data)
multiplayer.peer_disconnected.connect(destroy_user_data)
spawned.connect(on_spawned)
despawned.connect(on_despawned)
func create_user_data(id: int):
if not multiplayer.is_server(): return
spawn([id])
func destroy_user_data(id: int):
if not multiplayer.is_server(): return
get_node(spawn_path).get_node(str(id)).queue_free()
func custom_spawn(vars) -> Node:
var id = vars[0]
var u: UserData = user_data_scene.instantiate() as UserData
u.set_multiplayer_authority(id)
u.name = str(id)
u.id = id
return u
func get_user_data_or_null(id: int) -> UserData:
return get_node(spawn_path).get_node_or_null(str(id))
func on_spawned(node: Node) -> void:
user_data_spawned.emit(node.get_multiplayer_authority(), node)
func on_despawned(node: Node) -> void:
user_data_despawned.emit(node.get_multiplayer_authority())