mirror of
https://github.com/thegatesbrowser/godot-multiplayer.git
synced 2025-07-19 04:44:47 -04:00
copy from thegates-jam repo
This commit is contained in:
parent
c1a7ad74e1
commit
1a335de566
523 changed files with 22408 additions and 0 deletions
23
user_data/user_data.gd
Normal file
23
user_data/user_data.gd
Normal 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
19
user_data/user_data.tscn
Normal 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")
|
24
user_data/user_data_events.gd
Normal file
24
user_data/user_data_events.gd
Normal 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)
|
BIN
user_data/user_data_events.res
Normal file
BIN
user_data/user_data_events.res
Normal file
Binary file not shown.
39
user_data/user_data_manager.gd
Normal file
39
user_data/user_data_manager.gd
Normal 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
|
19
user_data/user_data_manager.tscn
Normal file
19
user_data/user_data_manager.tscn
Normal 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")
|
47
user_data/user_data_spawner.gd
Normal file
47
user_data/user_data_spawner.gd
Normal 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())
|
Loading…
Add table
Add a link
Reference in a new issue