NEON-29: Show player world x,y,z in prototype HUD

Add UICanvas/PlayerPositionLabel (top-left) and refresh each frame from main.gd.
pull/41/head
VinPropane 2026-04-12 16:52:19 -04:00
parent 1867e3e45c
commit 173c348030
2 changed files with 29 additions and 0 deletions

View File

@ -992,3 +992,22 @@ offset_right = -12.0
offset_bottom = -8.0
grow_horizontal = 2
autowrap_mode = 3
[node name="PlayerPositionLabel" type="Label" parent="UICanvas" unique_id=9000003]
layout_mode = 0
anchors_preset = 1
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
offset_left = 8.0
offset_top = 8.0
offset_right = 220.0
offset_bottom = 72.0
grow_horizontal = 0
grow_vertical = 0
theme_override_colors/font_color = Color(0.92, 0.95, 0.98, 1)
theme_override_colors/font_outline_color = Color(0.08, 0.08, 0.1, 1)
theme_override_constants/outline_size = 6
theme_override_font_sizes/font_size = 15
text = "x: —\ny: —\nz: —"

View File

@ -7,6 +7,7 @@ extends Node3D
## (see `isometric_follow_camera.gd`).
## Prototype: two random short bumps (sibling StaticBody3D under NavigationRegion3D; see
## `random_floor_bumps.gd`) before nav bake.
## Prototype HUD: world `CharacterBody3D` position in `UICanvas/PlayerPositionLabel`.
const MOVE_REJECT_MSG_SECONDS: float = 4.0
@ -29,10 +30,12 @@ var _dev_obstacle_smoke: Node3D
@onready var _authority: Node = $PositionAuthorityClient
@onready var _radius_preview: Node3D = $World/InteractionMarkers
@onready var _move_reject_label: Label = $UICanvas/MoveRejectLabel
@onready var _player_pos_label: Label = $UICanvas/PlayerPositionLabel
@onready var _floor: StaticBody3D = $World/NavigationRegion3D/Floor
func _ready() -> void:
set_process(true)
set_process_unhandled_key_input(true)
await get_tree().process_frame
_dev_obstacle_smoke = get_node_or_null("World/NavigationRegion3D/Obstacle") as Node3D
@ -54,6 +57,13 @@ func _ready() -> void:
_radius_preview.call("setup_player", _player)
func _process(_delta: float) -> void:
if not is_instance_valid(_player) or not is_instance_valid(_player_pos_label):
return
var p: Vector3 = _player.global_position
_player_pos_label.text = "x: %.3f\ny: %.3f\nz: %.3f" % [p.x, p.y, p.z]
func _on_target_chosen(world: Vector3) -> void:
_authority.call("submit_move_target", world)