diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index 893195a..6490ace 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -157,6 +157,13 @@ func die(): main.chat.rpc(&'chat_notification', "Player " + main.player_list.players[self.get_network_master()].name + " is dead") #queue_free() +func update_color() -> void: #change player's wolrdmodel color +## @onready var player_material = +## var material = player_material + var player_material = mesh.mesh.surface_get_material(0).duplicate() + player_material.albedo_color = main.player_list.get(self.get_network_master()).color + print("Updating color of player pid ", self.get_network_master(), " to ", player_material.albedo_color ) + mesh.mesh.surface_set_material(0, player_material) func _physics_process(delta): # rpc_unreliable(&'set_global_transform', global_transform) diff --git a/Game/Assets/Characters/Player.tscn b/Game/Assets/Characters/Player.tscn index 3899a46..f44ea5b 100644 --- a/Game/Assets/Characters/Player.tscn +++ b/Game/Assets/Characters/Player.tscn @@ -1,9 +1,18 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://Assets/Characters/Player.gd" type="Script" id=1] [ext_resource path="res://Assets/Weapons/Weapon.tscn" type="PackedScene" id=3] +[sub_resource type="StandardMaterial3D" id=4] +albedo_color = Color(0.545098, 0.545098, 0.545098, 1) +roughness = 0.22 +rim_enabled = true +rim_tint = 0.0 +proximity_fade_distance = 0.68 +distance_fade_max_distance = 0.4 + [sub_resource type="CapsuleMesh" id=1] +material = SubResource( 4 ) radius = 0.4 mid_height = 0.9 diff --git a/Game/Main.gd b/Game/Main.gd index 76b14e2..5d9d649 100644 --- a/Game/Main.gd +++ b/Game/Main.gd @@ -156,9 +156,14 @@ func _input(_event) -> void: if player_list.players.has(pid): var old_name = player_list.get(pid).name - if old_name != new_info.name: chat.chat_notification("Player [b]" + old_name + "[/b] changed name to [b]" + new_info.name + "[/b]") + + var old_color = player_list.get(pid).color + if old_color != new_info.color: + chat.chat_notification("Player [b]" + new_info.name + "[/b] changed color to [b][color=" + new_info.color.to_html() + "]" + new_info.name + "[/color][/b]") + $Players.get_node(str(pid)).update_color() + elif get_tree().network_peer.get_unique_id() == 1: for i in player_list.players.keys(): #notify existing players the new one has joined # if i != pid: @@ -207,8 +212,8 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void: var new_info: PlayerInfo if not respawn: # first spawn - new_info = PlayerInfo.new() # generate namee, color etc - else: # respawn + new_info = PlayerInfo.new() # generate name, color etc + elif is_local: # respawn, only works for local players new_info = player_list.players[pid] # reuse previous name, color etc new_info.health = 100 # give the respawned player full health @@ -224,9 +229,11 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void: local_player.get_node("Head/Camera").current = true $NetworkTesting/TextEdit.text = new_info.name $NetworkTesting/ColorPickerButton.color = new_info.color + #local_player.rpc(&'set_color', new_info.color) elif local_player: # if there is a local player, make sure we keep using it's camera new_player.get_node("Head/Camera").current = false local_player.get_node("Head/Camera").current = true + #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 @@ -311,3 +318,4 @@ func _on_TextEdit_text_submitted(new_text): func _on_ColorPickerButton_color_changed(color): player_list.players[get_tree().network_peer.get_unique_id()].color = color push_local_player_info() + local_player.rpc(&'set_color', color)