forked from unfa/liblast
Updated networking code to new Godot 4 version. Removed unused code in Player.gd and cleaned up commented garbage
parent
b11b83f918
commit
70f24ce4e7
|
@ -88,7 +88,7 @@ var jetpack_was_active = false
|
|||
var velocity := Vector3.ZERO
|
||||
var gravity_vec := Vector3.ZERO
|
||||
|
||||
@rpc(nosync,unreliable) func update_movement(player_transform, head_rotation, lin_velocity, jetpack):
|
||||
@rpc(auth, nosync,unreliable) func update_movement(player_transform, head_rotation, lin_velocity, jetpack):
|
||||
global_transform = player_transform
|
||||
head.set_rotation(head_rotation)
|
||||
jetpack_active = jetpack
|
||||
|
@ -97,24 +97,8 @@ var gravity_vec := Vector3.ZERO
|
|||
func _ready() -> void:
|
||||
#Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
view_zoom_target = 1.0
|
||||
|
||||
# generate_info()
|
||||
|
||||
rpc_config(&'move_and_slide', MultiplayerAPI.RPC_MODE_ANY)
|
||||
rpc_config(&"aim", MultiplayerAPI.RPC_MODE_ANY)
|
||||
rpc_config(&"set_global_transform", MultiplayerAPI.RPC_MODE_ANY)
|
||||
rpc_config(&"set_linear_velocity", MultiplayerAPI.RPC_MODE_ANY)
|
||||
head.rpc_config(&"set_rotation", MultiplayerAPI.RPC_MODE_ANY)
|
||||
rpc_config(&"set_info", MultiplayerAPI.RPC_MODE_ANY)
|
||||
|
||||
# rpc_config(&'move_and_slide', MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
||||
# rpc_config(&"aim", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
||||
# rpc_config(&"set_global_transform", MultiplayerAPI.RPC_MODE_PUPPET)
|
||||
# rpc_config(&"set_linear_velocity", MultiplayerAPI.RPC_MODE_PUPPET)
|
||||
# head.rpc_config(&"set_rotation", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
||||
# rpc_config(&"set_info", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
||||
|
||||
if is_network_authority(): # prevent puppets from attempting to steer the authority - this just causes RPC errors
|
||||
if is_multiplayer_authority(): # prevent puppets from attempting to steer the authority - this just causes RPC errors
|
||||
input_active = true
|
||||
$Head/Camera.current = true
|
||||
else:
|
||||
|
@ -143,7 +127,7 @@ func _input(event) -> void:
|
|||
if not input_active:
|
||||
return
|
||||
|
||||
assert(is_network_authority() == true, "input_active is true, even though the node is not network_authority")
|
||||
assert(is_multiplayer_authority() == true, "input_active is true, even though the node is not multiplayer_authority")
|
||||
|
||||
if Input.is_action_just_pressed("view_zoom"):
|
||||
# tween.remove_all()
|
||||
|
@ -183,7 +167,7 @@ func _process(delta):
|
|||
if not input_active:
|
||||
return
|
||||
|
||||
assert(is_network_authority() == true, "input_active is true, even though the node is not network_authority")
|
||||
assert(is_multiplayer_authority() == true, "input_active is true, even though the node is not multiplayer_authority")
|
||||
|
||||
if view_zoom_direction and view_zoom < view_zoom_target:
|
||||
view_zoom = min(view_zoom_target, view_zoom + delta * 4)
|
||||
|
@ -192,41 +176,35 @@ func _process(delta):
|
|||
|
||||
|
||||
func damage(hp: int):
|
||||
var target = main.player_list.players[self.get_network_authority()]
|
||||
var target = main.player_list.players[self.get_multiplayer_authority()]
|
||||
target.health -= hp
|
||||
# if target.health <= 0: # int(name) is the player instance node name signifying owner's PID
|
||||
# die()
|
||||
|
||||
func die(killer_pid: int):
|
||||
var gibs = gibs_vfx.instantiate()
|
||||
get_tree().root.add_child(gibs)
|
||||
gibs.global_transform = self.global_transform#
|
||||
|
||||
#if get_tree().get_rpc_sender_id() != get_network_authority():
|
||||
#if get_tree().get_rpc_sender_id() != get_multiplayer_authority():
|
||||
# print ("Death requested by a non-master. Ignoring")
|
||||
# return
|
||||
main.rpc(&'destroy_player', self.get_network_authority())
|
||||
main.rpc(&'destroy_player', self.get_multiplayer_authority())
|
||||
|
||||
|
||||
main.chat.rpc(&'chat_notification', "Player [/i][b][color=" + main.player_list.players[self.get_network_authority()].color.to_html() + "]" + main.player_list.players[self.get_network_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
||||
main.chat.rpc(&'chat_notification', "Player [/i][b][color=" + main.player_list.players[self.get_multiplayer_authority()].color.to_html() + "]" + main.player_list.players[self.get_multiplayer_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
||||
#queue_free()
|
||||
|
||||
func update_player(info) -> void:
|
||||
update_color(info.color)
|
||||
|
||||
func update_color(color) -> void: #change player's wolrdmodel color
|
||||
#var pid = self.get_network_authority()
|
||||
func update_color(color) -> void: #change player's wolrldmodel color
|
||||
|
||||
var player_material = mesh.mesh.surface_get_material(0).duplicate()
|
||||
player_material.albedo_color = color
|
||||
mesh.set_surface_override_material(0, player_material)
|
||||
|
||||
func _physics_process(delta):
|
||||
# rpc_unreliable(&'set_global_transform', global_transform)
|
||||
# head.rpc_unreliable(&'set_rotation', head.get_rotation())
|
||||
#rpc(&'set_global_transform', global_transform)
|
||||
#head.rpc(&'set_rotation', head.get_rotation())
|
||||
|
||||
if not is_network_authority():
|
||||
|
||||
if not is_multiplayer_authority():
|
||||
move_and_slide()
|
||||
return
|
||||
|
||||
|
@ -269,7 +247,7 @@ func _physics_process(delta):
|
|||
jetpack_fuel = min(jetpack_tank, jetpack_fuel + jetpack_recharge * delta)
|
||||
|
||||
#print("Jetpack fuel: ", jetpack_fuel, " active: ", jetpack_active, " delta: ", delta, " gravity vec: ", gravity_vec)
|
||||
|
||||
|
||||
if direction.length() > 0: # normalized() will return a null
|
||||
direction = direction.normalized()
|
||||
|
||||
|
@ -279,11 +257,6 @@ func _physics_process(delta):
|
|||
velocity = velocity.lerp(direction * speed, accel * delta)
|
||||
|
||||
linear_velocity = velocity + gravity_vec
|
||||
#slide = move_and_slide_with_snap(movement, snap, Vector3.UP)
|
||||
# rpc_unreliable(&'set_linear_velocity', linear_velocity)
|
||||
# rpc_unreliable(&"move_and_slide")
|
||||
# rpc(&'set_linear_velocity', linear_velocity)
|
||||
# rpc(&'move_and_slide')
|
||||
move_and_slide()
|
||||
|
||||
if not is_on_floor() and not ground_check.is_colliding(): # while in mid-air collisions affect momentum
|
||||
|
@ -291,12 +264,6 @@ func _physics_process(delta):
|
|||
velocity.z = linear_velocity.z
|
||||
gravity_vec.y = linear_velocity.y
|
||||
|
||||
# update puppets
|
||||
# if get_tree().multiplayer.get_network_unique_id() == 1:
|
||||
# rpc(&'update_movement', global_transform, head.get_rotation())
|
||||
# else:
|
||||
# rpc_id(1, &'update_movement', global_transform, head.get_rotation())
|
||||
#
|
||||
rpc(&'update_movement', global_transform, head.get_rotation(), linear_velocity, jetpack_active)
|
||||
|
||||
# (stair) climbing
|
||||
|
|
|
@ -35,12 +35,12 @@ func scoretab(show := true):
|
|||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
# if main.local_player == null: # player is dead ATM
|
||||
# print("local_player is null; PID is ", get_tree().multiplayer.get_network_unique_id(),"; respawn queue: ", main.respawn_queue)
|
||||
if not get_tree().multiplayer.has_network_peer(): # don't do anything if we're offline
|
||||
# print("local_player is null; PID is ", get_tree().multiplayer.get_multiplayer_unique_id(),"; respawn queue: ", main.respawn_queue)
|
||||
if not get_tree().multiplayer.has_multiplayer_peer(): # don't do anything if we're offline
|
||||
return
|
||||
|
||||
if main.spawn_queue.has(get_tree().multiplayer.get_network_unique_id()):
|
||||
var countdown = main.spawn_queue[get_tree().multiplayer.get_network_unique_id()] - main.uptime
|
||||
if main.spawn_queue.has(get_tree().multiplayer.get_unique_id()):
|
||||
var countdown = main.spawn_queue[get_tree().multiplayer.get_unique_id()] - main.uptime
|
||||
# countdown = round(countdown * 10) / 10
|
||||
$RespawnCountdown.text = "RESPAWNING IN " + str("%1.2f" % countdown) + " SECONDS..."
|
||||
$RespawnCountdown.visible = true
|
||||
|
|
|
@ -20,7 +20,7 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
|
|||
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
|
||||
|
||||
@rpc(sync) func shoot():
|
||||
#print("SHOOT from PID ", get_tree().multiplayer.get_network_unique_id(), " controlled by ", player.get_network_authority())
|
||||
#print("SHOOT from PID ", get_tree().multiplayer.get_multiplayer_unique_id(), " controlled by ", player.get_multiplayer_authority())
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
|
||||
var from = camera.get_global_transform().origin
|
||||
|
@ -35,21 +35,21 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
|
|||
|
||||
if ray: # did we hit anything?
|
||||
if ray['collider'].has_method(&'damage'):
|
||||
if is_network_authority(): #get_tree().multiplayer.get_network_unique_id() == 1: # make sure this can only run on the server
|
||||
if is_multiplayer_authority(): #get_tree().multiplayer.get_multiplayer_unique_id() == 1: # make sure this can only run on the server
|
||||
#print("SHOT HIT ", ray['collider'])
|
||||
ray['collider'].damage(20) # apply damage
|
||||
if main.player_list.get(ray['collider'].get_network_authority()).health <= 0: # if he ded
|
||||
ray['collider'].die(self.get_network_authority())
|
||||
if main.player_list.get(ray['collider'].get_multiplayer_authority()).health <= 0: # if he ded
|
||||
ray['collider'].die(self.get_multiplayer_authority())
|
||||
|
||||
main.player_list.players[player.get_network_authority()].score += 1 # give the killer a point
|
||||
main.rpc(&'player_list_update', main.player_list.get(player.get_network_authority()).serialize(), player.get_network_authority())
|
||||
main.player_list.players[player.get_multiplayer_authority()].score += 1 # give the killer a point
|
||||
main.rpc(&'player_list_update', main.player_list.get(player.get_multiplayer_authority()).serialize(), player.get_multiplayer_authority())
|
||||
hud.get_node("Crosshair").kill()
|
||||
# update local HUD
|
||||
else:
|
||||
hud.get_node("Crosshair").hit()
|
||||
|
||||
# boardcast the new health value to all peers
|
||||
main.rpc(&'player_list_update', main.player_list.get(ray['collider'].get_network_authority()).serialize(), ray['collider'].get_network_authority())
|
||||
main.rpc(&'player_list_update', main.player_list.get(ray['collider'].get_multiplayer_authority()).serialize(), ray['collider'].get_multiplayer_authority())
|
||||
main.update_hud()
|
||||
|
||||
impact_vfx = impact_player.instantiate()
|
||||
|
|
88
Game/Main.gd
88
Game/Main.gd
|
@ -1,8 +1,7 @@
|
|||
extends Node
|
||||
|
||||
enum GameFocus {MENU, GAME, CHAT, AWAY}
|
||||
enum NetworkRole {NONE, CLIENT, SERVER, DEDICATED_SERVER, RELAY_SERVER}
|
||||
|
||||
enum MultiplayerRole {NONE, CLIENT, SERVER, DEDICATED_SERVER, RELAY_SERVER}
|
||||
|
||||
const NET_PORT = 12597
|
||||
|
||||
|
@ -11,10 +10,10 @@ const NET_SERVER = "localhost"
|
|||
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
|
||||
var role = NetworkRole.NONE:
|
||||
var role = MultiplayerRole.NONE:
|
||||
set(new_role):
|
||||
role = new_role
|
||||
print("Network Role changed to ", NetworkRole.keys()[new_role])
|
||||
print("Multiplayer Role changed to ", MultiplayerRole.keys()[new_role])
|
||||
|
||||
var player_scene = preload("res://Assets/Characters/Player.tscn")
|
||||
|
||||
|
@ -41,11 +40,6 @@ class PlayerInfo:
|
|||
self.focus = 999
|
||||
self.health = 100
|
||||
self.score = 0
|
||||
# else:
|
||||
# self.name = name
|
||||
# self.team = team
|
||||
# self.color = color
|
||||
# self.focus = 0
|
||||
|
||||
func serialize():
|
||||
return {
|
||||
|
@ -96,15 +90,12 @@ func _process(delta):
|
|||
|
||||
for i in spawn_queue.keys():
|
||||
if spawn_queue[i] <= uptime:
|
||||
var is_local = true if i == get_tree().multiplayer.get_network_unique_id() else false
|
||||
var is_local = true if i == get_tree().multiplayer.get_unique_id() else false
|
||||
create_player(i, is_local, true)
|
||||
spawn_queue.erase(i)
|
||||
|
||||
class PlayerList:
|
||||
var players = {}
|
||||
#
|
||||
# func store(pid, item):
|
||||
# items[pid] = item
|
||||
|
||||
func erase(pid):
|
||||
players.erase(pid)
|
||||
|
@ -112,21 +103,10 @@ class PlayerList:
|
|||
func set(pid: int, info: PlayerInfo):
|
||||
# if info is PlayerInfo:
|
||||
players[pid] = info
|
||||
# else:
|
||||
# var new_info = PlayerInfo.deserialize(info)
|
||||
# players[pid] = new_info
|
||||
|
||||
func get(pid: int) -> PlayerInfo:
|
||||
return players[pid]
|
||||
|
||||
# func update():
|
||||
# if get_tree().multiplayer.get_network_unique_id() == 1:
|
||||
# for i in players.keys:
|
||||
# rpc(&'player_list_update', i, players[i].serialize())
|
||||
# else:
|
||||
# rpc_id(1, &'player_list_update', players[get_tree().multiplayer.get_network_unique_id()].serialize())
|
||||
|
||||
|
||||
@onready var player_list = PlayerList.new()
|
||||
|
||||
var focus = GameFocus.MENU :
|
||||
|
@ -153,16 +133,6 @@ var focus = GameFocus.MENU :
|
|||
|
||||
focus = new_focus
|
||||
|
||||
#@remote set_info(info) -> void:
|
||||
# player_info = PlayerInfo.new(info['name'], info['team'].to_int(), Color(info['color']))
|
||||
# print("set_info - rpc called from ", get_tree().get_rpc_sender_id())
|
||||
|
||||
#@master func update_info() -> void:
|
||||
# rpc(&'set_info', player_info.serialize())
|
||||
|
||||
#@master func generate_info() -> void:
|
||||
#rpc(&'set_info', PlayerInfo.new(player_name, 0, color).serialize() )
|
||||
|
||||
func _input(_event) -> void:
|
||||
if Input.is_action_just_pressed("ui_cancel"):
|
||||
if focus == GameFocus.GAME:
|
||||
|
@ -175,9 +145,6 @@ func _input(_event) -> void:
|
|||
elif Input.is_action_just_released("show_scoretab"):
|
||||
hud.scoretab(false)
|
||||
|
||||
#@remote func st(player_list):
|
||||
# self.player_list = player_list
|
||||
|
||||
func game_over():
|
||||
pass
|
||||
|
||||
|
@ -185,13 +152,12 @@ func check_game_win_condition():
|
|||
for i in player_list.players.keys():
|
||||
if player_list.players[i].score >= game_score_limit:
|
||||
chat.rpc(&'chat_notification', "Player " + player_list.players[i].name + " has won this round!")
|
||||
#rpc(&'game_over', player_list.players[i].name)
|
||||
game_over()
|
||||
|
||||
func update_hud():
|
||||
hud.get_node("ScoreRank").text = "SCORE: " + str(player_list.get( get_tree().multiplayer.get_network_unique_id() ).score)
|
||||
hud.get_node("ScoreRank").text = "SCORE: " + str(player_list.get( get_tree().multiplayer.get_unique_id() ).score)
|
||||
|
||||
var score = player_list.get( get_tree().multiplayer.get_network_unique_id() ).score
|
||||
var score = player_list.get( get_tree().multiplayer.get_unique_id() ).score
|
||||
var scores = []
|
||||
|
||||
for i in player_list.players.values():
|
||||
|
@ -206,9 +172,7 @@ func update_hud():
|
|||
scores.reverse()
|
||||
|
||||
var lead = score - scores[0]
|
||||
|
||||
#var rank =
|
||||
|
||||
|
||||
hud.get_node("ScoreRank").text = "SCORE: " + str(score) + "\nRANK: "
|
||||
|
||||
if lead > 0:
|
||||
|
@ -235,9 +199,9 @@ func update_hud():
|
|||
update_hud()
|
||||
|
||||
func push_local_player_info(): #
|
||||
var id = get_tree().multiplayer.get_network_unique_id()
|
||||
var id = get_tree().multiplayer.get_unique_id()
|
||||
|
||||
rpc(&'player_list_update', player_list.get(id).serialize(), get_tree().multiplayer.get_network_unique_id())
|
||||
rpc(&'player_list_update', player_list.get(id).serialize(), get_tree().multiplayer.get_unique_id())
|
||||
|
||||
@rpc(sync,auth,reliable) func destroy_player(pid: int):
|
||||
|
||||
|
@ -262,7 +226,7 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
|||
var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())]
|
||||
new_player.name = str(pid)
|
||||
new_player.global_transform = spawnpoint.global_transform
|
||||
new_player.set_network_authority(pid)
|
||||
new_player.set_multiplayer_authority(pid)
|
||||
$Players.add_child(new_player)
|
||||
|
||||
var new_info: PlayerInfo
|
||||
|
@ -277,7 +241,7 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
|||
player_list.set(pid, new_info)
|
||||
|
||||
# superfluous and harmful code that messes up player data:
|
||||
# if get_tree().multiplayer.get_network_unique_id() != 1: # if we're not the server - update the server
|
||||
# if get_tree().multiplayer.get_multiplayer_unique_id() != 1: # if we're not the server - update the server
|
||||
# rpc_id(1, &'player_list_update', new_info.serialize(), pid) # send local player info to the server
|
||||
# else: # if we're the server, update the clients
|
||||
# rpc(&'player_list_update', new_info.serialize(), pid)
|
||||
|
@ -294,18 +258,18 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
|||
#new_player.rpc(&'set_color', player_list.get(pid).color)
|
||||
|
||||
func start_dedicated_server(): # start server without creating a local player
|
||||
role = NetworkRole.DEDICATED_SERVER
|
||||
role = MultiplayerRole.DEDICATED_SERVER
|
||||
peer.create_server(NET_PORT, 16)
|
||||
get_tree().network_peer = peer
|
||||
get_tree().multiplayer_peer = peer
|
||||
#create_player(1, true)
|
||||
|
||||
func _on_Host_pressed(): # start server and create a local player
|
||||
role = NetworkRole.SERVER
|
||||
role = MultiplayerRole.SERVER
|
||||
$NetworkTesting/Host.disabled = true
|
||||
$NetworkTesting/Connect.disabled = true
|
||||
|
||||
peer.create_server(NET_PORT, 16)
|
||||
get_tree().multiplayer.network_peer = peer
|
||||
get_tree().multiplayer.multiplayer_peer = peer
|
||||
create_player(1, true)
|
||||
focus = GameFocus.GAME
|
||||
chat.chat_notification("Started server")
|
||||
|
@ -315,13 +279,13 @@ func _on_Connect_pressed():
|
|||
$NetworkTesting/Connect.disabled = true
|
||||
|
||||
peer.create_client(NET_SERVER, NET_PORT)
|
||||
get_tree().multiplayer.network_peer = peer
|
||||
get_tree().multiplayer.multiplayer_peer = peer
|
||||
|
||||
func _player_connected(pid) -> void:
|
||||
print("player connected, id: ", pid)
|
||||
create_player(pid, false)
|
||||
|
||||
if get_tree().multiplayer.get_network_unique_id() == 1: # if we're the server
|
||||
if get_tree().multiplayer.is_server(): # if we're the server
|
||||
for i in player_list.players.keys(): # send the player_list to the new client
|
||||
#pass
|
||||
rpc_id(pid, &'player_list_update', player_list.get(i).serialize(), i) # send local player info to the server
|
||||
|
@ -329,22 +293,22 @@ func _player_connected(pid) -> void:
|
|||
# if local_player:
|
||||
# local_player.rpc(&"update_info")
|
||||
#
|
||||
# if role in [NetworkRole.SERVER, NetworkRole.DEDICATED_SERVER]:
|
||||
# if role in [MultiplayerRole.SERVER, MultiplayerRole.DEDICATED_SERVER]:
|
||||
# rpc_id(id, "player_list_update", player_list)
|
||||
|
||||
func _player_disconnected(pid) -> void:
|
||||
print("player disconnected, id: ", pid)
|
||||
|
||||
if get_tree().multiplayer.get_network_unique_id() == 1: # if we're the server, broadcast that a player left
|
||||
if get_tree().multiplayer.is_server(): # if we're the server, broadcast that a player left
|
||||
chat.rpc(&'chat_notification', "Player [b]" + player_list.get(pid).name + "[/b] left")
|
||||
|
||||
func _connected_ok() -> void:
|
||||
print("connected to server")
|
||||
chat.chat_notification("Connected to server")
|
||||
var pid = get_tree().multiplayer.get_network_unique_id()
|
||||
var pid = get_tree().multiplayer.get_unique_id()
|
||||
create_player(pid, true)
|
||||
focus = GameFocus.GAME
|
||||
role = NetworkRole.CLIENT
|
||||
role = MultiplayerRole.CLIENT
|
||||
|
||||
func _connected_fail() -> void:
|
||||
print("connection to server failed")
|
||||
|
@ -352,7 +316,7 @@ func _connected_fail() -> void:
|
|||
|
||||
func _server_disconnected() -> void:
|
||||
print("server disconnected")
|
||||
role = NetworkRole.NONE
|
||||
role = MultiplayerRole.NONE
|
||||
chat.chat_notification("Server disconnected")
|
||||
|
||||
|
||||
|
@ -360,8 +324,8 @@ func _ready() -> void:
|
|||
#peer.compression_mode = NetworkedMultiplayerENet.COMPRESS_ZSTD
|
||||
print("Commandline arguments: ", OS.get_cmdline_args())
|
||||
|
||||
get_tree().multiplayer.connect("network_peer_connected", self._player_connected)
|
||||
get_tree().multiplayer.connect("network_peer_disconnected", self._player_disconnected)
|
||||
get_tree().multiplayer.connect("peer_connected", self._player_connected)
|
||||
get_tree().multiplayer.connect("peer_disconnected", self._player_disconnected)
|
||||
get_tree().multiplayer.connect("connected_to_server", self._connected_ok)
|
||||
get_tree().multiplayer.connect("connection_failed", self._connected_fail)
|
||||
get_tree().multiplayer.connect("server_disconnected", self._server_disconnected)
|
||||
|
@ -370,12 +334,12 @@ func _ready() -> void:
|
|||
start_dedicated_server()
|
||||
|
||||
func _on_TextEdit_text_submitted(new_text):
|
||||
player_list.players[get_tree().multiplayer.get_network_unique_id()].name = new_text
|
||||
player_list.players[get_tree().multiplayer.get_unique_id()].name = new_text
|
||||
push_local_player_info()
|
||||
#chat_announcement("Player " + old_name + " is now known as " + new_name)
|
||||
|
||||
func _on_ColorPickerButton_color_changed(color):
|
||||
player_list.players[get_tree().multiplayer.get_network_unique_id()].color = color
|
||||
player_list.players[get_tree().multiplayer.get_unique_id()].color = color
|
||||
push_local_player_info()
|
||||
#local_player.rpc(&'set_color', color)
|
||||
|
||||
|
|
Loading…
Reference in New Issue