better healthbars and one for the player as well
This commit is contained in:
58
scenes/ui/Healthbar.cs
Normal file
58
scenes/ui/Healthbar.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class Healthbar : ProgressBar
|
||||
{
|
||||
private Timer _damageCatchUpTimer;
|
||||
private ProgressBar _damagedHealth;
|
||||
|
||||
private float _currentHealth;
|
||||
public float CurrentHealth
|
||||
{
|
||||
get => _currentHealth;
|
||||
set => SetHealth(value);
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_damageCatchUpTimer = GetNode<Timer>("DamageCatchUp");
|
||||
_damagedHealth = GetNode<ProgressBar>("Damagebar");
|
||||
|
||||
_damageCatchUpTimer.Timeout += OnDamageCatchUp;
|
||||
Visible = false;
|
||||
}
|
||||
|
||||
public void Initialize(float initialHealth)
|
||||
{
|
||||
_currentHealth = initialHealth;
|
||||
MaxValue = initialHealth;
|
||||
Value = initialHealth;
|
||||
_damagedHealth.MaxValue = initialHealth;
|
||||
_damagedHealth.Value = initialHealth;
|
||||
}
|
||||
|
||||
public void SetHealth(float newHealth)
|
||||
{
|
||||
var previousHealth = _currentHealth;
|
||||
_currentHealth = Mathf.Min(newHealth, (float) MaxValue);
|
||||
_currentHealth = newHealth;
|
||||
Value = _currentHealth;
|
||||
|
||||
Visible = _currentHealth < MaxValue;
|
||||
|
||||
if (_currentHealth < previousHealth)
|
||||
{
|
||||
_damageCatchUpTimer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_damagedHealth.Value = _currentHealth;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnDamageCatchUp()
|
||||
{
|
||||
_damagedHealth.Value = _currentHealth;
|
||||
}
|
||||
}
|
||||
1
scenes/ui/Healthbar.cs.uid
Normal file
1
scenes/ui/Healthbar.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://l5cjcaehyssk
|
||||
49
scenes/ui/healthbar.tscn
Normal file
49
scenes/ui/healthbar.tscn
Normal file
@@ -0,0 +1,49 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://cyw8p0p6a78tl"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://l5cjcaehyssk" path="res://scenes/ui/Healthbar.cs" id="1_0k5hr"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0sgot"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0k5hr"]
|
||||
bg_color = Color(0.698864, 0.047356047, 0, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0sgot"]
|
||||
bg_color = Color(0.14767182, 0.14767182, 0.14767176, 1)
|
||||
expand_margin_left = 2.0
|
||||
expand_margin_top = 2.0
|
||||
expand_margin_right = 2.0
|
||||
expand_margin_bottom = 2.0
|
||||
shadow_color = Color(0, 0, 0, 0.27450982)
|
||||
shadow_offset = Vector2(0, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kl70x"]
|
||||
bg_color = Color(0.8862616, 0.88626146, 0.8862615, 1)
|
||||
|
||||
[node name="Healthbar" type="ProgressBar"]
|
||||
z_index = 10
|
||||
custom_minimum_size = Vector2(512, 12)
|
||||
offset_right = 512.0
|
||||
offset_bottom = 12.0
|
||||
theme_override_styles/background = SubResource("StyleBoxEmpty_0sgot")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_0k5hr")
|
||||
value = 60.0
|
||||
show_percentage = false
|
||||
script = ExtResource("1_0k5hr")
|
||||
|
||||
[node name="Damagebar" type="ProgressBar" parent="."]
|
||||
z_index = -10
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_0sgot")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_kl70x")
|
||||
value = 80.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="DamageCatchUp" type="Timer" parent="."]
|
||||
wait_time = 0.8
|
||||
one_shot = true
|
||||
ignore_time_scale = true
|
||||
Reference in New Issue
Block a user