Attempted implementation of player colors on world models. Not working.
parent
bd2de8adb8
commit
9664960cd8
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
14
Game/Main.gd
14
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)
|
||||
|
|
Reference in New Issue