Add double health bar
This commit is contained in:
parent
c38526bc48
commit
def6539bbc
Binary file not shown.
Binary file not shown.
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_1cgct"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_1cgct"]
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_1cgct"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_orxjf"]
|
||||||
viewport_path = NodePath("health_bar_sprite/health_bar_viewport")
|
viewport_path = NodePath("health_bar_sprite/health_bar_viewport")
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_yli5f"]
|
[sub_resource type="Curve" id="Curve_yli5f"]
|
||||||
@ -32,7 +32,10 @@ point_count = 2
|
|||||||
width = 70
|
width = 70
|
||||||
curve = SubResource("Curve_qn18y")
|
curve = SubResource("Curve_qn18y")
|
||||||
|
|
||||||
[node name="player" type="RemotePlayer" unique_id=845968872 node_paths=PackedStringArray("soldier_mesh", "collider", "effects", "spectator_camera", "camera_origin", "name_label", "health_bar", "health_bar_sprite")]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_rmxnb"]
|
||||||
|
viewport_path = NodePath("double_health_bar_sprite/health_bar_viewport")
|
||||||
|
|
||||||
|
[node name="player" type="RemotePlayer" unique_id=845968872 node_paths=PackedStringArray("soldier_mesh", "collider", "effects", "spectator_camera", "camera_origin", "name_label", "health_bar", "double_health_bar", "health_bar_sprite", "double_health_bar_sprite")]
|
||||||
move_speed = 7.0
|
move_speed = 7.0
|
||||||
soldier_mesh = NodePath("soldier_m")
|
soldier_mesh = NodePath("soldier_m")
|
||||||
collider = NodePath("collision_shape_3d")
|
collider = NodePath("collision_shape_3d")
|
||||||
@ -43,7 +46,9 @@ spectator_camera = NodePath("spectate_root/spectate_camera")
|
|||||||
camera_origin = NodePath("camera_origin")
|
camera_origin = NodePath("camera_origin")
|
||||||
name_label = NodePath("name_label")
|
name_label = NodePath("name_label")
|
||||||
health_bar = NodePath("health_bar_sprite/health_bar_viewport/health_bar")
|
health_bar = NodePath("health_bar_sprite/health_bar_viewport/health_bar")
|
||||||
|
double_health_bar = NodePath("double_health_bar_sprite/health_bar_viewport/double_health_bar")
|
||||||
health_bar_sprite = NodePath("health_bar_sprite")
|
health_bar_sprite = NodePath("health_bar_sprite")
|
||||||
|
double_health_bar_sprite = NodePath("double_health_bar_sprite")
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 4
|
collision_mask = 4
|
||||||
slide_on_ceiling = false
|
slide_on_ceiling = false
|
||||||
@ -78,7 +83,7 @@ font_size = 64
|
|||||||
[node name="health_bar_sprite" type="Sprite3D" parent="." unique_id=1478315510]
|
[node name="health_bar_sprite" type="Sprite3D" parent="." unique_id=1478315510]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.1606798, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.1606798, 0)
|
||||||
billboard = 1
|
billboard = 1
|
||||||
texture = SubResource("ViewportTexture_1cgct")
|
texture = SubResource("ViewportTexture_orxjf")
|
||||||
|
|
||||||
[node name="health_bar_viewport" type="SubViewport" parent="health_bar_sprite" unique_id=1819065918]
|
[node name="health_bar_viewport" type="SubViewport" parent="health_bar_sprite" unique_id=1819065918]
|
||||||
disable_3d = true
|
disable_3d = true
|
||||||
@ -98,3 +103,27 @@ texture_progress = SubResource("CurveTexture_840kl")
|
|||||||
tint_under = Color(0, 0, 0, 0.3647059)
|
tint_under = Color(0, 0, 0, 0.3647059)
|
||||||
tint_over = Color(1, 1, 1, 0)
|
tint_over = Color(1, 1, 1, 0)
|
||||||
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
||||||
|
|
||||||
|
[node name="double_health_bar_sprite" type="Sprite3D" parent="." unique_id=1003826376]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.075818, 0)
|
||||||
|
billboard = 1
|
||||||
|
texture = SubResource("ViewportTexture_rmxnb")
|
||||||
|
|
||||||
|
[node name="health_bar_viewport" type="SubViewport" parent="double_health_bar_sprite" unique_id=1279264647]
|
||||||
|
disable_3d = true
|
||||||
|
transparent_bg = true
|
||||||
|
size = Vector2i(70, 10)
|
||||||
|
size_2d_override = Vector2i(70, 10)
|
||||||
|
size_2d_override_stretch = true
|
||||||
|
|
||||||
|
[node name="double_health_bar" type="TextureProgressBar" parent="double_health_bar_sprite/health_bar_viewport" unique_id=62083710]
|
||||||
|
offset_right = 70.0
|
||||||
|
offset_bottom = 1.0
|
||||||
|
scale = Vector2(1, 5)
|
||||||
|
value = 50.0
|
||||||
|
texture_under = SubResource("CurveTexture_3g557")
|
||||||
|
texture_over = SubResource("CurveTexture_1cgct")
|
||||||
|
texture_progress = SubResource("CurveTexture_840kl")
|
||||||
|
tint_under = Color(0, 0, 0, 0)
|
||||||
|
tint_over = Color(1, 1, 1, 0)
|
||||||
|
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
||||||
|
|||||||
@ -32,7 +32,10 @@ point_count = 2
|
|||||||
width = 70
|
width = 70
|
||||||
curve = SubResource("Curve_qn18y")
|
curve = SubResource("Curve_qn18y")
|
||||||
|
|
||||||
[node name="player" type="RemotePlayer" unique_id=845968872 node_paths=PackedStringArray("soldier_mesh", "collider", "effects", "spectator_camera", "camera_origin", "name_label", "health_bar", "health_bar_sprite")]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_bfcd3"]
|
||||||
|
viewport_path = NodePath("double_health_bar_sprite/double_health_bar_viewport")
|
||||||
|
|
||||||
|
[node name="player" type="RemotePlayer" unique_id=845968872 node_paths=PackedStringArray("soldier_mesh", "collider", "effects", "spectator_camera", "camera_origin", "name_label", "health_bar", "double_health_bar", "health_bar_sprite", "double_health_bar_sprite")]
|
||||||
move_speed = 5.0
|
move_speed = 5.0
|
||||||
soldier_mesh = NodePath("soldier_m")
|
soldier_mesh = NodePath("soldier_m")
|
||||||
collider = NodePath("collision_shape_3d")
|
collider = NodePath("collision_shape_3d")
|
||||||
@ -43,7 +46,9 @@ spectator_camera = NodePath("spectate_root/spectate_camera")
|
|||||||
camera_origin = NodePath("camera_origin")
|
camera_origin = NodePath("camera_origin")
|
||||||
name_label = NodePath("name_label")
|
name_label = NodePath("name_label")
|
||||||
health_bar = NodePath("health_bar_sprite/health_bar_viewport/health_bar")
|
health_bar = NodePath("health_bar_sprite/health_bar_viewport/health_bar")
|
||||||
|
double_health_bar = NodePath("double_health_bar_sprite/double_health_bar_viewport/double_health_bar")
|
||||||
health_bar_sprite = NodePath("health_bar_sprite")
|
health_bar_sprite = NodePath("health_bar_sprite")
|
||||||
|
double_health_bar_sprite = NodePath("double_health_bar_sprite")
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
collision_mask = 4
|
collision_mask = 4
|
||||||
|
|
||||||
@ -96,3 +101,27 @@ texture_progress = SubResource("CurveTexture_840kl")
|
|||||||
tint_under = Color(0, 0, 0, 0.3647059)
|
tint_under = Color(0, 0, 0, 0.3647059)
|
||||||
tint_over = Color(1, 1, 1, 0)
|
tint_over = Color(1, 1, 1, 0)
|
||||||
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
||||||
|
|
||||||
|
[node name="double_health_bar_sprite" type="Sprite3D" parent="." unique_id=1841216543]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0923502, 0)
|
||||||
|
billboard = 1
|
||||||
|
texture = SubResource("ViewportTexture_bfcd3")
|
||||||
|
|
||||||
|
[node name="double_health_bar_viewport" type="SubViewport" parent="double_health_bar_sprite" unique_id=1749355472]
|
||||||
|
disable_3d = true
|
||||||
|
transparent_bg = true
|
||||||
|
size = Vector2i(70, 10)
|
||||||
|
size_2d_override = Vector2i(70, 10)
|
||||||
|
size_2d_override_stretch = true
|
||||||
|
|
||||||
|
[node name="double_health_bar" type="TextureProgressBar" parent="double_health_bar_sprite/double_health_bar_viewport" unique_id=220343908]
|
||||||
|
offset_right = 70.0
|
||||||
|
offset_bottom = 1.0
|
||||||
|
scale = Vector2(1, 5)
|
||||||
|
value = 50.0
|
||||||
|
texture_under = SubResource("CurveTexture_3g557")
|
||||||
|
texture_over = SubResource("CurveTexture_1cgct")
|
||||||
|
texture_progress = SubResource("CurveTexture_840kl")
|
||||||
|
tint_under = Color(0, 0, 0, 0)
|
||||||
|
tint_over = Color(1, 1, 1, 0)
|
||||||
|
tint_progress = Color(0.5660922, 1.7688051e-06, 3.3691526e-07, 1)
|
||||||
|
|||||||
@ -44,7 +44,11 @@ pub struct RemotePlayer {
|
|||||||
#[export]
|
#[export]
|
||||||
health_bar: Option<Gd<TextureProgressBar>>,
|
health_bar: Option<Gd<TextureProgressBar>>,
|
||||||
#[export]
|
#[export]
|
||||||
|
double_health_bar: Option<Gd<TextureProgressBar>>,
|
||||||
|
#[export]
|
||||||
health_bar_sprite: Option<Gd<Sprite3D>>,
|
health_bar_sprite: Option<Gd<Sprite3D>>,
|
||||||
|
#[export]
|
||||||
|
double_health_bar_sprite: Option<Gd<Sprite3D>>,
|
||||||
|
|
||||||
pub player_id: Option<u16>,
|
pub player_id: Option<u16>,
|
||||||
pub player_name: String,
|
pub player_name: String,
|
||||||
@ -154,10 +158,7 @@ impl IPlayer for RemotePlayer {
|
|||||||
s.kill(source);
|
s.kill(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(health_bar) = &mut s.health_bar {
|
s.update_health_bar();
|
||||||
let value = (s.health as f64 / 100.).clamp(0., 1.) * 100.;
|
|
||||||
health_bar.set_value(value);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +189,11 @@ impl IPlayer for RemotePlayer {
|
|||||||
if let Some(mut name) = self.name_label.take() {
|
if let Some(mut name) = self.name_label.take() {
|
||||||
name.queue_free();
|
name.queue_free();
|
||||||
}
|
}
|
||||||
if let Some(healthbar_sprit) = &mut self.health_bar_sprite {
|
if let Some(healthbar_sprite) = &mut self.health_bar_sprite {
|
||||||
healthbar_sprit.set_visible(false);
|
healthbar_sprite.set_visible(false);
|
||||||
|
}
|
||||||
|
if let Some(double_health_bar_sprite) = &mut self.double_health_bar_sprite {
|
||||||
|
double_health_bar_sprite.set_visible(false);
|
||||||
}
|
}
|
||||||
self.is_dead = true;
|
self.is_dead = true;
|
||||||
}
|
}
|
||||||
@ -241,6 +245,7 @@ impl IPlayer for RemotePlayer {
|
|||||||
let delta = (s.health + amount).min(200) - s.health;
|
let delta = (s.health + amount).min(200) - s.health;
|
||||||
s.run_deferred(move |s| s.signals().on_heal().emit(delta));
|
s.run_deferred(move |s| s.signals().on_heal().emit(delta));
|
||||||
s.health += delta;
|
s.health += delta;
|
||||||
|
s.update_health_bar();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,6 +267,7 @@ impl ICharacterBody3D for RemotePlayer {
|
|||||||
});
|
});
|
||||||
|
|
||||||
self.swap_weapon(WeaponType::Raygun, false);
|
self.swap_weapon(WeaponType::Raygun, false);
|
||||||
|
self.update_health_bar();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process(&mut self, delta: f64) {
|
fn process(&mut self, delta: f64) {
|
||||||
@ -309,6 +315,17 @@ impl RemotePlayer {
|
|||||||
);
|
);
|
||||||
#[signal]
|
#[signal]
|
||||||
pub fn on_heal(amount: i32);
|
pub fn on_heal(amount: i32);
|
||||||
|
|
||||||
|
pub fn update_health_bar(&mut self) {
|
||||||
|
if let Some(health_bar) = &mut self.health_bar {
|
||||||
|
let value = (self.health as f64 / 100.).clamp(0., 1.) * 100.;
|
||||||
|
health_bar.set_value(value);
|
||||||
|
}
|
||||||
|
if let Some(double_health_bar) = &mut self.double_health_bar {
|
||||||
|
let double_value = ((self.health as f64 - 100.) / 100.).clamp(0., 1.) * 100.;
|
||||||
|
double_health_bar.set_value(double_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[godot_dyn]
|
#[godot_dyn]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user