forked from unfa/liblast
Implemented score, rank and lead/gap HUD display
parent
b59c8ed790
commit
bef8e92398
|
@ -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
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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:
|
||||
|
|
34
Game/Main.gd
34
Game/Main.gd
|
@ -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)
|
||||
|
||||
|
|
|
@ -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="."]
|
||||
|
|
Loading…
Reference in New Issue