From 0f5e075a54b55ead261f9958b050fb1865e54851 Mon Sep 17 00:00:00 2001 From: Felipe M Date: Thu, 4 Feb 2021 20:04:56 +0100 Subject: [PATCH] Health meter --- metroidvania/Scenes/Player/PlayerStats.gd | 2 ++ metroidvania/Scenes/UI/HealthMeter.gd | 12 ++++++++++ metroidvania/Scenes/UI/HealthMeter.tscn | 27 +++++++++++++++++++++++ metroidvania/Scenes/UI/UI.tscn | 16 +++++--------- 4 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 metroidvania/Scenes/UI/HealthMeter.gd create mode 100644 metroidvania/Scenes/UI/HealthMeter.tscn diff --git a/metroidvania/Scenes/Player/PlayerStats.gd b/metroidvania/Scenes/Player/PlayerStats.gd index b9f0417..9c06cf3 100644 --- a/metroidvania/Scenes/Player/PlayerStats.gd +++ b/metroidvania/Scenes/Player/PlayerStats.gd @@ -4,6 +4,7 @@ class_name PlayerStats var max_health = 4 var health = max_health setget set_health +signal player_health_changed(value) signal player_died func set_health(value): @@ -11,6 +12,7 @@ func set_health(value): Events.emit_signal("add_screenshake", 0.5, 0.5) health = clamp(value, 0, max_health) + emit_signal("player_health_changed", health) if health == 0: emit_signal("player_died") diff --git a/metroidvania/Scenes/UI/HealthMeter.gd b/metroidvania/Scenes/UI/HealthMeter.gd new file mode 100644 index 0000000..d07d31f --- /dev/null +++ b/metroidvania/Scenes/UI/HealthMeter.gd @@ -0,0 +1,12 @@ +extends Control + +var PlayerStats = ResourceLoader.PlayerStats + +onready var full = $Full + +func _ready(): + PlayerStats.connect("player_health_changed", self, "_on_player_health_changed") + + +func _on_player_health_changed(value): + full.rect_size.x = value * 5 + 1 diff --git a/metroidvania/Scenes/UI/HealthMeter.tscn b/metroidvania/Scenes/UI/HealthMeter.tscn new file mode 100644 index 0000000..0bf5d7c --- /dev/null +++ b/metroidvania/Scenes/UI/HealthMeter.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Assets/UI/HealthMeterEmpty.png" type="Texture" id=1] +[ext_resource path="res://Assets/UI/HealthMeter.png" type="Texture" id=2] +[ext_resource path="res://Scenes/UI/HealthMeter.gd" type="Script" id=3] + +[node name="HealthMeter" type="Control"] +margin_right = 21.0 +margin_bottom = 12.0 +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Empty" type="TextureRect" parent="."] +margin_right = 21.0 +margin_bottom = 12.0 +texture = ExtResource( 1 ) +expand = true +stretch_mode = 2 + +[node name="Full" type="TextureRect" parent="."] +margin_right = 21.0 +margin_bottom = 12.0 +texture = ExtResource( 2 ) +expand = true +stretch_mode = 2 diff --git a/metroidvania/Scenes/UI/UI.tscn b/metroidvania/Scenes/UI/UI.tscn index f1c2650..0f8c064 100644 --- a/metroidvania/Scenes/UI/UI.tscn +++ b/metroidvania/Scenes/UI/UI.tscn @@ -1,15 +1,11 @@ [gd_scene load_steps=2 format=2] -[ext_resource path="res://Assets/UI/HealthMeterEmpty.png" type="Texture" id=1] +[ext_resource path="res://Scenes/UI/HealthMeter.tscn" type="PackedScene" id=1] [node name="UI" type="CanvasLayer"] -[node name="TextureRect" type="TextureRect" parent="."] -margin_left = 32.0 -margin_top = 24.0 -margin_right = 72.0 -margin_bottom = 64.0 -texture = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +[node name="HealthMeter" parent="." instance=ExtResource( 1 )] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 25.0 +margin_bottom = 16.0