From 9a157b22843859b662ba0694898280fd6894ce9c Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 13 Nov 2021 15:02:48 +0200 Subject: [PATCH] Added health bar --- .../player_handlers/player_body_handler.gd | 8 ++ .../network_processors/network_setup.gd | 1 + .../assets/scripts/ui_element_handlers/HUD.gd | 18 ++++ source/assets/sprites/GUI/bar-background.png | Bin 0 -> 989 bytes source/assets/sprites/GUI/bar-fill.png | Bin 0 -> 984 bytes source/entities/player/player_node.tscn | 88 +++++++++--------- source/scenes/GUI/sinplayer_setup.tscn | 2 +- source/scenes/OVERLAY/elements/HUD.tscn | 26 ++++++ 8 files changed, 98 insertions(+), 45 deletions(-) create mode 100644 source/assets/scripts/ui_element_handlers/HUD.gd create mode 100644 source/assets/sprites/GUI/bar-background.png create mode 100644 source/assets/sprites/GUI/bar-fill.png create mode 100644 source/scenes/OVERLAY/elements/HUD.tscn diff --git a/source/assets/scripts/player_handlers/player_body_handler.gd b/source/assets/scripts/player_handlers/player_body_handler.gd index ef96d5c..0f531fd 100644 --- a/source/assets/scripts/player_handlers/player_body_handler.gd +++ b/source/assets/scripts/player_handlers/player_body_handler.gd @@ -9,6 +9,8 @@ var bullet var username_text = load("res://source/scenes/OVERLAY/elements/username_text.tscn") var username setget username_set var username_text_instance = null +var health_bar_scene = load("res://source/scenes/OVERLAY/elements/HUD.tscn") +var health_bar_instance = null var hp = 100 setget set_hp var can_shoot = true var is_reloading = false @@ -96,6 +98,8 @@ func _ready(): get_tree().connect("network_peer_connected", self, "_network_peer_connected") username_text_instance = Global.instance_node_at_location(username_text, PersistentNodes, global_position) username_text_instance.player_following = self + health_bar_instance = Global.instance_node_at_location(health_bar_scene, PersistentNodes, global_position) + health_bar_instance.player_following = self update_shoot_mode(false) Global.alive_players.append(self) @@ -421,14 +425,17 @@ func _on_hitbox_area_entered(area): sync func hit_by_damager(damage): hp -= damage modulate = Color(5, 5, 5, 1) + health_bar_instance.value = hp hit_timer.start() sync func enable() -> void: hp = 100 + health_bar_instance.value = 100 can_shoot = false update_shoot_mode(false) username_text_instance.visible = true + health_bar_instance.visible = true visible = true $player_collider.disabled = false $hitbox/CollisionShape2D.disabled = false @@ -444,6 +451,7 @@ sync func enable() -> void: sync func destroy() -> void: username_text_instance.visible = false + health_bar_instance.visible = false visible = false $player_collider.disabled = true $hitbox/CollisionShape2D.disabled = true diff --git a/source/assets/scripts/server_handlers/network_processors/network_setup.gd b/source/assets/scripts/server_handlers/network_processors/network_setup.gd index 52b6bb6..3f970ce 100644 --- a/source/assets/scripts/server_handlers/network_processors/network_setup.gd +++ b/source/assets/scripts/server_handlers/network_processors/network_setup.gd @@ -70,6 +70,7 @@ func _player_disconnected(id) -> void: if PersistentNodes.has_node(str(id)): PersistentNodes.get_node(str(id)).username_text_instance.queue_free() + PersistentNodes.get_node(str(id)).health_bar_instance.queue_free() PersistentNodes.get_node(str(id)).queue_free() diff --git a/source/assets/scripts/ui_element_handlers/HUD.gd b/source/assets/scripts/ui_element_handlers/HUD.gd new file mode 100644 index 0000000..f4f6cdd --- /dev/null +++ b/source/assets/scripts/ui_element_handlers/HUD.gd @@ -0,0 +1,18 @@ +extends Node2D + +var player_following = null +var value = "" setget value_set + +var distanceToPlayerOffset = -150 + +onready var health_bar = $health_bar + + +func _process(delta: float) -> void: + if player_following != null: + global_position = player_following.global_position + Vector2(0,distanceToPlayerOffset).rotated(player_following.rotation) + + +func value_set(new_text) -> void: + value = new_text + health_bar.value = value diff --git a/source/assets/sprites/GUI/bar-background.png b/source/assets/sprites/GUI/bar-background.png new file mode 100644 index 0000000000000000000000000000000000000000..6a11cb2c7d4db2437049c2453a57160c5895531e GIT binary patch literal 989 zcmV<310wv1P)A2cNdQ!&VC#0Q~3YLc-bMTromWSYW1WokM;Xi*}WW)w8&h=1r> zmQFG%30XlX;~$1G1I1p%At5d6LBt|LO9!-Bab%91d+xd8C@OQ$-uvy|v-Upg`_{+W z_w2LQ6@EC)fO>-7%*uerfsw#4pifWcd7FFAz<>;>Qr;IW%6 zlKzTM%oBi_1!?{OF#1;S;_Z7i z1E+zfCH)@tGDiSrc0ceV@JO$Q;+?x)22KIvC0z*@hzsCL;Q6H0FJAhG6YcG^|8$D0 zSFhc!1Ag9JWT0=~`=}@%!?=nH29^ydbf=w?Ud$7KnNJprSB92eKHwl)zz|i!Cd;6lq4-XQPTBT-^c)Fb~x!r-_)8~&iooYRrpbC42&K% zl07?`DCyTP?)pJV)i(rSW&?r0qk;%7zTdEx?Yjy-K@=MwPWn5$u9ml#ERJIj&I<-f zx_CVUm|38P{ZXq6fBZ@1lxLkJEp4EWw0y?{gM%mgoKYpIH59-rz?SIc1FdZ=T>4hp zxNs6rc3lHim3c=xGbMcy3g8{!y(l}`&zor6ly#D@w1Hl-Xg>31&y2%bF6o0%04sra zqZS)K`HT&lbCN>ZcyR_#{k&IM^jeVQbH*x3E4=_5kbxI~13~T%q8ES{fZqaK)_~6d zE=M2m0`LOxTY$?N@EO46==&|e@#yzZ0C`8jo3}QxcB4NEPJ?_390jkCv^qQqd>z>2 zUk0Ti-1!(jZfs!EQ+Y3g7D&p50;mCUUi_asf1avo)6>a_W2g@A`<9_YhQv_^Rl;9~ z0vHbDREq}I^=~et-wuz44**}O#7dIYF5(EDO)CFZUtY`+h00000 LNkvXXu0mjfkRi*= literal 0 HcmV?d00001 diff --git a/source/assets/sprites/GUI/bar-fill.png b/source/assets/sprites/GUI/bar-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..fd65befd316f172f3d8fcae1238fb3ed2cd57fe0 GIT binary patch literal 984 zcmV;}11J26P)!?#RtFpe?yE>xp44O+I0if{sXzI_aRM;2u*@F?S|UzTc1p(AI{-*lFpB=0A?1{@I^f8 z;-BX@efRTu#qD{=7-;E!jcIekZ@k2oN%|@hz-nM$+&yrlo1WFLJCOxoVBWjynB96u z63H`?-irjV8Q30==zHT3y)S)I0Qe4};e|)2U%Mhn#3o5QBLQ>(TT2A6`yjo$JDt4( zFwn4m74_>^CXsBD)ZqdsK!LL$xB#*kD!AVTQ1Ak0!E*s*F;sBB3!vZy&VuIx$YQAA zeiuN&3!DYd1(3y1!Tm0Pf)_Xo-b4g2ek*v-A$ni*t>7$j^WZPD6}&~#j%X+FIp9sd z8I*@|PCmzZ2i7tB!ErZ()<}9g62PNCN$c>%o<2@52_4~Xd1s*I#H&neye~b15 zlx+%alk|Cs0KyA1^S1E36gef&(YEk~H(hQEubo*A$p@02j+|+OAt!*_a?FFLUY>y; z!XC|Ktyh9o0|B4`+$gIapP#x7`Ox#7h^Q%4UcO80000