Added player health and health bar

This commit is contained in:
2026-06-29 19:45:21 +03:00
parent 05b31471aa
commit aa95e704d4
10 changed files with 283 additions and 3 deletions
+71
View File
@@ -0,0 +1,71 @@
class_name HealthBar
extends Node2D
const ANIMATION_ALERT = "alert"
const SHADER_MAX_VALUE = "shader_parameter/max_value"
const SHADER_CURRENT_VALUE = "shader_parameter/current_value"
const SHADER_OLD_VALUE = "shader_parameter/old_value"
const OLD_VALUE_DECRETION_RATE = 25.0
var _max_value := 0.0:
set(value):
_max_value = value
if is_node_ready():
health_sprite.material.set(SHADER_MAX_VALUE, _max_value)
var _current_value := 0.0:
set(value):
_current_value = value
if is_node_ready():
health_sprite.material.set(SHADER_CURRENT_VALUE, _current_value)
var _old_value := 0.0:
set(value):
_old_value = value
if is_node_ready():
health_sprite.material.set(SHADER_OLD_VALUE, _old_value)
var _old_value_tween : Tween
var _is_animation_needed := false
@onready var background_sprite : Sprite2D = $BackgroundSprite
@onready var alert_sprite : Sprite2D = $AlertSprite
@onready var health_sprite : Sprite2D = $HealthSprite
@onready var animation_player : AnimationPlayer = $AnimationPlayer
func _ready() -> void:
alert_sprite.hide()
func _process(_delta: float) -> void:
if _is_animation_needed and not animation_player.is_playing():
animation_player.play(ANIMATION_ALERT)
_is_animation_needed = false
func initialize(max_value: float, value: float) -> void:
_max_value = max_value
_current_value = value
_old_value = value
func set_current_value(value: float) -> void:
if value < _current_value:
_is_animation_needed = true
_current_value = value
var time := (_old_value - _current_value)/OLD_VALUE_DECRETION_RATE
if _old_value_tween and _old_value_tween.is_running():
_old_value_tween.kill()
_old_value_tween = create_tween()
_old_value_tween.tween_property(self, "_old_value", _current_value, abs(time))
+1
View File
@@ -0,0 +1 @@
uid://nkpolcm0u4dw
+79
View File
@@ -0,0 +1,79 @@
[gd_scene format=3 uid="uid://b1x0tmnf7hx7h"]
[ext_resource type="Script" uid="uid://nkpolcm0u4dw" path="res://game/hud/health_bar.gd" id="1_2bnd8"]
[ext_resource type="Texture2D" uid="uid://bud580fp54qdi" path="res://images/hud/health_bar.png" id="2_hc5qd"]
[ext_resource type="Shader" uid="uid://cdo2tw14pkf6n" path="res://game/shaders/health_bar.gdshader" id="3_vrpsd"]
[sub_resource type="AtlasTexture" id="AtlasTexture_2bnd8"]
atlas = ExtResource("2_hc5qd")
region = Rect2(0, 16, 80, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_hc5qd"]
atlas = ExtResource("2_hc5qd")
region = Rect2(0, 0, 80, 16)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_hc5qd"]
shader = ExtResource("3_vrpsd")
shader_parameter/max_value = 0.0
shader_parameter/current_value = 0.0
shader_parameter/old_value = 0.0
shader_parameter/health_color = Color(0.36862746, 0.99215686, 0.5529412, 1)
shader_parameter/depletion_color = Color(0.32941177, 0.6509804, 0.41568628, 1)
shader_parameter/restoration_color = Color(1, 1, 1, 1)
shader_parameter/background_color = Color(0, 0, 0, 0)
[sub_resource type="AtlasTexture" id="AtlasTexture_vrpsd"]
atlas = ExtResource("2_hc5qd")
region = Rect2(2, 32, 76, 16)
[sub_resource type="Animation" id="Animation_hc5qd"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AlertSprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_vrpsd"]
resource_name = "alert"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AlertSprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"update": 1,
"values": [true, false, true, false, true, false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_5m3x1"]
_data = {
&"RESET": SubResource("Animation_hc5qd"),
&"alert": SubResource("Animation_vrpsd")
}
[node name="HealthBar" type="Node2D" unique_id=256637218]
script = ExtResource("1_2bnd8")
[node name="BackgroundSprite" type="Sprite2D" parent="." unique_id=92025763]
texture = SubResource("AtlasTexture_2bnd8")
[node name="AlertSprite" type="Sprite2D" parent="." unique_id=434583744]
texture = SubResource("AtlasTexture_hc5qd")
[node name="HealthSprite" type="Sprite2D" parent="." unique_id=1962337283]
material = SubResource("ShaderMaterial_hc5qd")
texture = SubResource("AtlasTexture_vrpsd")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1840862293]
libraries/ = SubResource("AnimationLibrary_5m3x1")