Attempted implementation of player colors on world models. Not working.

remotes/1705377932733043820/tmp_refs/heads/unbroken
unfa 2021-08-29 21:41:20 +02:00
parent bd2de8adb8
commit 9664960cd8
3 changed files with 28 additions and 4 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)