Add own health number

This commit is contained in:
Sofia 2026-07-24 22:38:49 +03:00
parent 9535227e6f
commit 2e71105ea2
4 changed files with 52 additions and 7 deletions

View File

@ -12,7 +12,13 @@ glow_enabled = true
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_oh8vq"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_oh8vq"]
[node name="player" type="LocalPlayer" unique_id=863055906 node_paths=PackedStringArray("camera", "soldier_mesh", "collider", "effects", "dead_cam_target", "respawn_label", "camera_origin", "weapon_node", "pause_panel", "exit_to_lobby", "settings_panel", "scoreboard", "chatbox")] [sub_resource type="LabelSettings" id="LabelSettings_7awel"]
font_size = 32
font_color = Color(1, 0, 0, 1)
outline_size = 10
outline_color = Color(0, 0, 0, 1)
[node name="player" type="LocalPlayer" unique_id=863055906 node_paths=PackedStringArray("camera", "soldier_mesh", "collider", "effects", "dead_cam_target", "respawn_label", "camera_origin", "weapon_node", "pause_panel", "exit_to_lobby", "settings_panel", "scoreboard", "chatbox", "health_label")]
look_sensitivity = 1.5 look_sensitivity = 1.5
camera = NodePath("camera_3d") camera = NodePath("camera_3d")
move_speed = 5.0 move_speed = 5.0
@ -28,6 +34,7 @@ exit_to_lobby = NodePath("pause_menu/v_box_container/exit_to_lobby")
settings_panel = NodePath("settings") settings_panel = NodePath("settings")
scoreboard = NodePath("scoreboard") scoreboard = NodePath("scoreboard")
chatbox = NodePath("chat_box") chatbox = NodePath("chat_box")
health_label = NodePath("health_label")
health = 100 health = 100
collision_mask = 4 collision_mask = 4
@ -157,12 +164,31 @@ metadata/_edit_lock_ = true
[node name="chat_box" parent="." unique_id=1125601400 instance=ExtResource("5_cv68x")] [node name="chat_box" parent="." unique_id=1125601400 instance=ExtResource("5_cv68x")]
in_game = true in_game = true
text_alignment = 2
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -500.0
offset_top = -300.0
offset_right = 0.0
offset_bottom = 0.0
grow_horizontal = 0
grow_vertical = 0
[node name="health_label" type="Label" parent="." unique_id=651212450]
anchors_preset = 2 anchors_preset = 2
anchor_top = 1.0 anchor_top = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_top = -300.0 offset_left = 34.0
offset_bottom = 0.0 offset_top = -45.0
offset_right = 74.0
offset_bottom = -22.0
grow_vertical = 0 grow_vertical = 0
text = "100"
label_settings = SubResource("LabelSettings_7awel")
vertical_alignment = 2
[connection signal="pressed" from="pause_menu/v_box_container/settings" to="settings" method="open"] [connection signal="pressed" from="pause_menu/v_box_container/settings" to="settings" method="open"]
[connection signal="pressed" from="pause_menu/v_box_container/exit_to_lobby" to="." method="exit_to_lobby"] [connection signal="pressed" from="pause_menu/v_box_container/exit_to_lobby" to="." method="exit_to_lobby"]

View File

@ -213,6 +213,8 @@ pub struct LocalPlayer {
#[export] #[export]
chatbox: Option<Gd<ChatBox>>, chatbox: Option<Gd<ChatBox>>,
#[export] #[export]
health_label: Option<Gd<Label>>,
#[export]
health: i32, health: i32,
pub player_id: Option<u16>, pub player_id: Option<u16>,
@ -337,6 +339,9 @@ impl IPlayer for LocalPlayer {
s.kill(source); s.kill(source);
} }
} }
if let Some(health_label) = &mut s.health_label {
health_label.set_text(&s.health.max(0).to_string());
}
}); });
} }

View File

@ -110,7 +110,6 @@ impl Weapon for Raygun {
if deal_damage && let Some(target) = target { if deal_damage && let Some(target) = target {
if let Ok(mut shootable) = target.collider.clone().try_dynify::<dyn Shootable>() { if let Ok(mut shootable) = target.collider.clone().try_dynify::<dyn Shootable>() {
godot_print!("{}", target.collider);
self.run_deferred(move |_| { self.run_deferred(move |_| {
shootable.dyn_bind_mut().on_shoot( shootable.dyn_bind_mut().on_shoot(
DamageSource::Player(player_id), DamageSource::Player(player_id),
@ -214,7 +213,6 @@ impl Weapon for Shotgun {
let delta = collider_pos - from; let delta = collider_pos - from;
if let Ok(mut shootable) = collider.clone().try_dynify::<dyn Shootable>() { if let Ok(mut shootable) = collider.clone().try_dynify::<dyn Shootable>() {
godot_print!("{} ({})", collider, delta.length());
self.run_deferred(move |_| { self.run_deferred(move |_| {
shootable.dyn_bind_mut().on_shoot( shootable.dyn_bind_mut().on_shoot(
DamageSource::Player(player_id), DamageSource::Player(player_id),

View File

@ -4,6 +4,7 @@ use godot::{
classes::{ classes::{
Engine, IVBoxContainer, InputEvent, LineEdit, RichTextLabel, ScrollContainer, VBoxContainer, Engine, IVBoxContainer, InputEvent, LineEdit, RichTextLabel, ScrollContainer, VBoxContainer,
}, },
global::HorizontalAlignment,
prelude::*, prelude::*,
}; };
@ -14,7 +15,7 @@ use crate::{
}; };
#[derive(GodotClass)] #[derive(GodotClass)]
#[class(base=VBoxContainer, init, tool)] #[class(base=VBoxContainer, tool)]
pub struct ChatBox { pub struct ChatBox {
#[export] #[export]
scroll: Option<Gd<ScrollContainer>>, scroll: Option<Gd<ScrollContainer>>,
@ -24,6 +25,8 @@ pub struct ChatBox {
line_edit: Option<Gd<LineEdit>>, line_edit: Option<Gd<LineEdit>>,
#[export] #[export]
pub in_game: bool, pub in_game: bool,
#[export]
text_alignment: HorizontalAlignment,
scroll_on_next_update: bool, scroll_on_next_update: bool,
@ -32,6 +35,18 @@ pub struct ChatBox {
#[godot_api] #[godot_api]
impl IVBoxContainer for ChatBox { impl IVBoxContainer for ChatBox {
fn init(base: Base<VBoxContainer>) -> ChatBox {
ChatBox {
scroll: None,
messages: None,
line_edit: None,
in_game: false,
text_alignment: HorizontalAlignment::LEFT,
scroll_on_next_update: false,
base,
}
}
fn ready(&mut self) { fn ready(&mut self) {
if !Engine::singleton().is_editor_hint() { if !Engine::singleton().is_editor_hint() {
self.run_deferred(|s| { self.run_deferred(|s| {
@ -96,7 +111,8 @@ impl ChatBox {
#[signal] #[signal]
pub fn on_closed(); pub fn on_closed();
fn on_new_message(&mut self, message: Gd<RichTextLabel>) { fn on_new_message(&mut self, mut message: Gd<RichTextLabel>) {
message.set_horizontal_alignment(self.text_alignment);
if let Some(messages) = &mut self.messages { if let Some(messages) = &mut self.messages {
messages.add_child(&message); messages.add_child(&message);
} }