Reworked health bar. Added shield regen

This commit is contained in:
2025-11-15 18:33:32 +03:00
parent 85a4fc7381
commit c391068961
11 changed files with 168 additions and 67 deletions
@@ -1,5 +1,5 @@
class_name HealthBarPart
extends Node2D
extends Control
@export var texture_value : Texture2D
@export var texture_shade : Texture2D
@@ -8,7 +8,7 @@ extends Node2D
@onready var value_bar : TextureProgressBar = $ValueBar
@onready var shade_bar : TextureProgressBar = $ShadeBar
@onready var shade_reset_timer : Timer = $ShadeResetTimer
@onready var shade_delay_timer : Timer = $ShadeDelayTimer
@onready var shade_tick_timer : Timer = $ShadeTickTimer
@@ -16,7 +16,7 @@ const TICK_COUNT = 5
var _tick_size : int = 0
var _target_value: int = 0
var _target_value: float = 0
func _ready() -> void:
@@ -31,7 +31,7 @@ func set_value(value: int) -> void:
if shade_bar.value < value_bar.value:
shade_bar.value = value_bar.value
else:
shade_reset_timer.start()
shade_delay_timer.start()
func set_max_value(max_value: int) -> void:
@@ -46,7 +46,7 @@ func set_max_value(max_value: int) -> void:
shade_bar.show()
func _on_shade_reset_timer_timeout() -> void:
func _on_shade_delay_timer_timeout() -> void:
var value_delta := shade_bar.value - value_bar.value
_tick_size = ceil(value_delta / TICK_COUNT)
_target_value = value_bar.value
@@ -1,16 +1,14 @@
[gd_scene load_steps=4 format=3 uid="uid://xbfxsiumbgkp"]
[gd_scene load_steps=2 format=3 uid="uid://xbfxsiumbgkp"]
[ext_resource type="Script" uid="uid://drwgq8fxaclvn" path="res://game/health_system/health_bar/health_bar_part.gd" id="1_nuv67"]
[ext_resource type="Texture2D" uid="uid://do586oblhwuc5" path="res://images/health.png" id="2_jlvn5"]
[sub_resource type="AtlasTexture" id="AtlasTexture_jlvn5"]
atlas = ExtResource("2_jlvn5")
region = Rect2(0, 48, 32, 16)
[node name="HealthBarPart" type="Node2D"]
[node name="HealthBarPart" type="Control"]
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_nuv67")
[node name="ShadeBar" type="TextureProgressBar" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
@@ -22,9 +20,10 @@ offset_right = 16.0
offset_bottom = 8.0
grow_horizontal = 2
grow_vertical = 2
texture_under = SubResource("AtlasTexture_jlvn5")
pivot_offset = Vector2(16, 8)
[node name="ValueBar" type="TextureProgressBar" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
@@ -36,13 +35,14 @@ offset_right = 16.0
offset_bottom = 8.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(16, 8)
[node name="ShadeResetTimer" type="Timer" parent="."]
[node name="ShadeDelayTimer" type="Timer" parent="."]
wait_time = 0.5
one_shot = true
[node name="ShadeTickTimer" type="Timer" parent="."]
wait_time = 0.1
[connection signal="timeout" from="ShadeResetTimer" to="." method="_on_shade_reset_timer_timeout"]
[connection signal="timeout" from="ShadeDelayTimer" to="." method="_on_shade_delay_timer_timeout"]
[connection signal="timeout" from="ShadeTickTimer" to="." method="_on_shade_tick_timer_timeout"]
+47 -15
View File
@@ -1,26 +1,58 @@
class_name HealthBar
extends Node2D
extends Control
@export var health: Health
@onready var shield_part : HealthBarPart = $ShieldPart
@onready var small_shield_part : HealthBarPart = $SmallShieldPart
@onready var large_shield_part : HealthBarPart = $LargeShieldPart
@onready var armor_part : HealthBarPart = $ArmorPart
@onready var hull_part : HealthBarPart = $HullPart
func _ready() -> void:
if health:
shield_part.set_max_value(health.max_shield)
shield_part.set_value(health.shield)
armor_part.set_max_value(health.max_armor)
armor_part.set_value(health.armor)
hull_part.set_max_value(health.max_hull)
hull_part.set_value(health.hull)
health.shield_updated.connect(shield_part.set_value)
health.armor_updated.connect(armor_part.set_value)
health.hull_updated.connect(hull_part.set_value)
if not health: return
small_shield_part.set_max_value(health.max_shield)
small_shield_part.set_value(health.shield)
large_shield_part.set_max_value(health.max_shield)
large_shield_part.set_value(health.shield)
armor_part.set_max_value(health.max_armor)
armor_part.set_value(health.armor)
hull_part.set_max_value(health.max_hull)
hull_part.set_value(health.hull)
_select_armor_part(health.armor)
health.shield_updated.connect(_on_shield_updated)
health.armor_updated.connect(_on_armor_updated)
health.hull_updated.connect(_on_hull_updated)
func _on_shield_updated(new_value: int) -> void:
small_shield_part.set_value(new_value)
large_shield_part.set_value(new_value)
func _on_armor_updated(new_value: int) -> void:
armor_part.set_value(new_value)
_select_armor_part(new_value)
func _on_hull_updated(new_value: int) -> void:
hull_part.set_value(new_value)
func _select_armor_part(armor_value: int) -> void:
if armor_value == 0:
armor_part.hide()
small_shield_part.show()
large_shield_part.hide()
else:
armor_part.show()
small_shield_part.hide()
large_shield_part.show()
+36 -5
View File
@@ -1,9 +1,13 @@
[gd_scene load_steps=10 format=3 uid="uid://d2snum2pxc2ui"]
[gd_scene load_steps=13 format=3 uid="uid://d2snum2pxc2ui"]
[ext_resource type="Script" uid="uid://be7k64p2kel8b" path="res://game/health_system/health_bar/heath_bar.gd" id="1_bx561"]
[ext_resource type="PackedScene" uid="uid://xbfxsiumbgkp" path="res://game/health_system/health_bar/health_bar_part.tscn" id="2_wb6me"]
[ext_resource type="Texture2D" uid="uid://do586oblhwuc5" path="res://images/health.png" id="3_fogsl"]
[sub_resource type="AtlasTexture" id="AtlasTexture_sgr4k"]
atlas = ExtResource("3_fogsl")
region = Rect2(0, 64, 32, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_wb6me"]
atlas = ExtResource("3_fogsl")
region = Rect2(0, 0, 32, 16)
@@ -20,25 +24,52 @@ region = Rect2(0, 16, 32, 16)
atlas = ExtResource("3_fogsl")
region = Rect2(32, 16, 32, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_lfh3j"]
[sub_resource type="AtlasTexture" id="AtlasTexture_hknxs"]
atlas = ExtResource("3_fogsl")
region = Rect2(0, 32, 32, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_lc4fa"]
[sub_resource type="AtlasTexture" id="AtlasTexture_f0v4d"]
atlas = ExtResource("3_fogsl")
region = Rect2(32, 32, 32, 16)
[node name="HeathBar" type="Node2D"]
[sub_resource type="AtlasTexture" id="AtlasTexture_lfh3j"]
atlas = ExtResource("3_fogsl")
region = Rect2(0, 48, 32, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_lc4fa"]
atlas = ExtResource("3_fogsl")
region = Rect2(32, 48, 32, 16)
[node name="HeathBar" type="Control"]
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_bx561")
[node name="Background" type="TextureRect" parent="."]
layout_mode = 0
offset_left = -16.0
offset_top = -8.0
offset_right = 16.0
offset_bottom = 8.0
pivot_offset = Vector2(16, 8)
texture = SubResource("AtlasTexture_sgr4k")
[node name="HullPart" parent="." instance=ExtResource("2_wb6me")]
layout_mode = 0
texture_value = SubResource("AtlasTexture_wb6me")
texture_shade = SubResource("AtlasTexture_fogsl")
[node name="ArmorPart" parent="." instance=ExtResource("2_wb6me")]
layout_mode = 0
texture_value = SubResource("AtlasTexture_b6cw0")
texture_shade = SubResource("AtlasTexture_w8ken")
[node name="ShieldPart" parent="." instance=ExtResource("2_wb6me")]
[node name="SmallShieldPart" parent="." instance=ExtResource("2_wb6me")]
layout_mode = 0
texture_value = SubResource("AtlasTexture_hknxs")
texture_shade = SubResource("AtlasTexture_f0v4d")
[node name="LargeShieldPart" parent="." instance=ExtResource("2_wb6me")]
layout_mode = 0
texture_value = SubResource("AtlasTexture_lfh3j")
texture_shade = SubResource("AtlasTexture_lc4fa")