Implemented score, rank and lead/gap HUD display

remotes/1705377932733043820/tmp_refs/heads/unbroken
unfa 2021-09-11 16:32:38 +02:00
parent b59c8ed790
commit bef8e92398
5 changed files with 67 additions and 1 deletions

View File

@ -15,6 +15,9 @@ func _ready():
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
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
# countdown = round(countdown * 10) / 10

View File

@ -238,4 +238,22 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="ScoreRank" type="Label" parent="."]
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -116.0
offset_top = -27.0
offset_bottom = 27.0
text = "SCORE: X
RANK: Y"
align = 2
valign = 1
structured_text_bidi_override_options = []
script = null
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="text_submitted" from="Chat/VBoxContainer/Typing/Editor" to="Chat" method="_on_Editor_text_submitted"]

View File

@ -1,6 +1,8 @@
extends Node3D
#Hand Camera Head Player
@onready var main = get_tree().root.get_node("Main")
@onready var hud = main.get_node("HUD")
@onready var score_rank = hud.get_node("ScoreRank")
@onready var player = get_parent().get_parent().get_parent().get_parent()
@onready var camera = get_parent().get_parent()
@onready var ejector = find_node("Ejector")
@ -39,9 +41,12 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
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())
# update local HUD
# 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.update_hud()
impact_vfx = impact_player.instantiate()
else:

View File

@ -171,6 +171,34 @@ func _input(_event) -> void:
#@remote func update_player_list(player_list):
# self.player_list = player_list
func update_hud():
hud.get_node("ScoreRank").text = "SCORE: " + str(player_list.get( get_tree().multiplayer.get_network_unique_id() ).score)
var score = player_list.get( get_tree().multiplayer.get_network_unique_id() ).score
var scores = []
for i in player_list.players.values():
scores.append(i.score)
scores.sort()
scores.reverse()
var rank = scores.find(score) + 1
scores.remove(scores.find(score))
scores.sort()
scores.reverse()
var lead = score - scores[0]
#var rank =
hud.get_node("ScoreRank").text = "SCORE: " + str(score) + "\nRANK: "
if lead > 0:
hud.get_node("ScoreRank").text += str(rank) + "\nLEAD: " + str(lead)
else:
hud.get_node("ScoreRank").text += str(rank) + "\nGAP: " + str(-lead)
@rpc func player_list_update(info, pid = get_tree().get_rpc_sender_id()):
var new_info = PlayerInfo.new()
new_info.deserialize(info)
@ -195,8 +223,13 @@ func _input(_event) -> void:
pid = get_tree().get_rpc_sender_id() #disallow clients setting player_info for other players than themselves
player_list.set(pid, new_info)
rpc(&'player_list_update', info, pid) # broadcast the new entry to clients
else: #we are client, so we're getting data relayed from the server
player_list.set(pid, new_info) # server relays other PID's data
# update locla HUD
update_hud()
#if pid == get_tree().multiplayer.get_network_unique_id():
func push_local_player_info(): #
var id = get_tree().multiplayer.get_network_unique_id()
@ -234,6 +267,7 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
else: # respawn
new_info = player_list.players[pid] # reuse previous name, color etc
new_info.health = 100 # give the respawned player full health
focus = GameFocus.GAME # make sure the player has no menu displayed when they respawn
player_list.set(pid, new_info)

View File

@ -23,6 +23,12 @@ structured_text_bidi_override_options = []
[node name="Editor" parent="HUD/Chat/VBoxContainer/Typing" index="1"]
structured_text_bidi_override_options = []
[node name="RespawnCountdown" parent="HUD" index="3"]
structured_text_bidi_override_options = []
[node name="ScoreRank" parent="HUD" index="4"]
structured_text_bidi_override_options = []
[node name="GUI" parent="." instance=ExtResource( "2" )]
[node name="Players" type="Node3D" parent="."]