mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-07-12 15:04:46 +00:00
Merge remote-tracking branch 'origin/develop' into feat/settings-v2
This commit is contained in:
commit
a32fb53393
41 changed files with 688 additions and 200 deletions
|
|
@ -39,10 +39,14 @@ func _ready() -> void:
|
|||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta : float) -> void:
|
||||
|
||||
var velocity_xz : Vector3 = player.linear_velocity
|
||||
velocity_xz.y = 0
|
||||
|
||||
text = \"\"
|
||||
text += \"fps: %d (%.2f mspf)\\n\" % [Engine.get_frames_per_second(), 1000.0 / Engine.get_frames_per_second()]
|
||||
text += \"position: %d, %d, %d\\n\" % [player.position.x, player.position.y, player.position.z]
|
||||
text += \"speed: %d km/h\\n\" % (player.linear_velocity.length() * 3.6)
|
||||
text += \"speed_xz: %d km/h\\n\" % (velocity_xz.length() * 3.6)
|
||||
var viewport_render_size : Vector2i = get_viewport().size * get_viewport().scaling_3d_scale
|
||||
text += \"3D viewport resolution: %d × %d (%d%%)\\n\" \\
|
||||
% [viewport_render_size.x, viewport_render_size.y, round(get_viewport().scaling_3d_scale * 100)]
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
extends Control
|
||||
|
||||
@export var player : Player
|
||||
@export var match_participant_component : MatchParticipantComponent
|
||||
@export var attach_point : Marker3D
|
||||
@export var healthbar_low_health_color : Color = Color(1 ,0 ,0, 0.78)
|
||||
@export var healthbar_mid_health_color : Color = Color(1, 1, 0, 0.78)
|
||||
|
|
@ -28,8 +29,8 @@ extends Control
|
|||
@onready var is_within_los : bool = false
|
||||
@onready var healthbar_fill_stylebox : StyleBoxFlat = _health_bar.get_theme_stylebox("fill")
|
||||
|
||||
func _ready() -> void:
|
||||
_player_name_label.text = player.nickname
|
||||
func set_nickname(new_nickname : String) -> void:
|
||||
_player_name_label.text = new_nickname
|
||||
|
||||
func _process(_delta : float) -> void:
|
||||
# retrieve camera for current viewport
|
||||
|
|
@ -37,10 +38,19 @@ func _process(_delta : float) -> void:
|
|||
|
||||
# if the player is NOT infront of the camera or camera does NOT have LOS to player
|
||||
if camera.is_position_behind(attach_point.global_position) or !is_within_los:
|
||||
_iff_container.hide() # hide the IFF and exit function
|
||||
return
|
||||
_iff_container.hide()
|
||||
else:
|
||||
_iff_container.show() # display the IFF
|
||||
_iff_container.show()
|
||||
|
||||
# Show the correct IFF based on whether the player we're looking at belongs is a friend or a foe
|
||||
# in other words if their team_ids are the same as the "pawn" player
|
||||
if player.pawn_player != null:
|
||||
if player.pawn_player.match_participant_component.team_id == player.match_participant_component.team_id:
|
||||
%FoeChevron.hide()
|
||||
%FriendChevron.show()
|
||||
else:
|
||||
%FoeChevron.show()
|
||||
%FriendChevron.hide()
|
||||
|
||||
func _physics_process(_delta : float) -> void:
|
||||
# https://docs.godotengine.org/en/stable/tutorials/physics/ray-casting.html
|
||||
|
|
@ -48,9 +58,12 @@ func _physics_process(_delta : float) -> void:
|
|||
is_within_los = false # always initialise trace_success as false
|
||||
var space_state : PhysicsDirectSpaceState3D = camera.get_world_3d().direct_space_state
|
||||
# do a trace check from camera to towards the player
|
||||
var query : PhysicsRayQueryParameters3D = PhysicsRayQueryParameters3D.create(camera.global_position, attach_point.global_position)
|
||||
var query : PhysicsRayQueryParameters3D = PhysicsRayQueryParameters3D.create(camera.global_position, player.global_position)
|
||||
# only collide with Layer 1 (objects) and Layer 32 (terrain/structures)
|
||||
query.collision_mask = 0b10000000_00000000_00000000_00000001
|
||||
# exclude the camera owner nodes from intersecting with the trace check
|
||||
query.exclude = [camera.owner]
|
||||
if player.pawn_player:
|
||||
query.exclude = [player.pawn_player]
|
||||
# do trace check and store result
|
||||
var result : Dictionary = space_state.intersect_ray(query)
|
||||
# if a result was returned and the hit result is the player
|
||||
|
|
@ -74,7 +87,6 @@ func _physics_process(_delta : float) -> void:
|
|||
|
||||
new_iff_position.y -= _iff_container.size.y # move the IFF up so the bottom of it is at the players head
|
||||
new_iff_position.x -= _iff_container.size.x / 2 # move the IFF left so it's centered horizontally above players head
|
||||
|
||||
position = new_iff_position # set the position of the IFF
|
||||
|
||||
func _update_health_bar(health : float) -> void:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,9 @@ theme_override_styles/fill = ExtResource("2_e3xla")
|
|||
value = 60.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="Chevron" type="Label" parent="IFFContainer"]
|
||||
[node name="FoeChevron" type="Label" parent="IFFContainer"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_direction = 2
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 1
|
||||
|
|
@ -52,3 +54,18 @@ theme_override_font_sizes/font_size = 14
|
|||
text = "▼"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 2
|
||||
|
||||
[node name="FriendChevron" type="Label" parent="IFFContainer"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_direction = 2
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 1
|
||||
theme_override_colors/font_color = Color(0, 1, 0, 0.2)
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 0.2)
|
||||
theme_override_constants/outline_size = 3
|
||||
theme_override_constants/line_spacing = -20
|
||||
theme_override_font_sizes/font_size = 14
|
||||
text = "▼"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 2
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@ func _unhandled_input(event : InputEvent) -> void:
|
|||
elif event.is_action_released("scoreboard"):
|
||||
hide()
|
||||
|
||||
func add_player(player : Player) -> void:
|
||||
_add_scoreboard_entry.rpc(player.player_id, player.nickname)
|
||||
func add_participant(participant : MatchParticipantComponent) -> void:
|
||||
_add_scoreboard_entry.rpc(participant.player_id, participant.nickname)
|
||||
|
||||
func remove_player(player : Player) -> void:
|
||||
_remove_scoreboard_entry.rpc(player.player_id)
|
||||
func remove_participant(participant : MatchParticipantComponent) -> void:
|
||||
_remove_scoreboard_entry.rpc(participant.player_id)
|
||||
|
||||
func increment_kill_count(player : Player) -> void:
|
||||
_entries[player.player_id].kills += 1
|
||||
func increment_kill_count(participant : MatchParticipantComponent) -> void:
|
||||
_entries[participant.player_id].kills += 1
|
||||
|
||||
func add_score_to_player(player : Player, amount : int) -> void:
|
||||
var player_id : int = player.player_id
|
||||
func add_score_to_player(participant : MatchParticipantComponent, amount : int) -> void:
|
||||
var player_id : int = participant.player_id
|
||||
var entry : ScoreboardEntry = _entries[player_id]
|
||||
_update_scoreboard_entry.rpc(player_id, entry.nickname, entry.kills, entry.score + amount)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue