Added player health and health bar
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user