Skip to content

Commit 3eebead

Browse files
committed
healthbar init
1 parent 2f21c2e commit 3eebead

File tree

5 files changed

+143
-2
lines changed

5 files changed

+143
-2
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
extends Control
2+
3+
4+
5+
6+
#var healthbar_x = 500
7+
#var healthbar_y =40
8+
var my_health_bar_size: Vector2 = Vector2(500.0, 40.0)
9+
#
10+
#var otherhealthbar_x = 250
11+
#var otherhealthbar_y =20
12+
var other_health_bar_size: Vector2 = Vector2(250.0,20.0)
13+
14+
var player_id
15+
@onready var player = get_node("../")
16+
var lbl_nametag
17+
18+
var health_bar_size: Vector2
19+
20+
func _ready():
21+
22+
#if my player
23+
if str(get_parent().name) == str($"/root/main/net".multiplayer.get_unique_id()):
24+
health_bar_size = my_health_bar_size
25+
26+
print("its me :) ---------------")
27+
else: #if other pplayer
28+
#add label
29+
# lbl_nametag = Label.new()
30+
# lbl_nametag.set_name("nametag")
31+
# lbl_nametag.text = "testtext"
32+
# lbl_nametag.set_position(Vector2(0,-20))
33+
# lbl_nametag.hide()
34+
# add_child(lbl_nametag)
35+
health_bar_size = other_health_bar_size
36+
37+
# hide()
38+
var image = Image.create(health_bar_size.x,health_bar_size.y,false,Image.FORMAT_RGB8)
39+
image.fill(Color.DIM_GRAY)
40+
var image_texture = ImageTexture.new()
41+
image_texture = ImageTexture.create_from_image(image)
42+
$vbox/health_bar.set_under_texture(image_texture)
43+
$vbox/health_bar.set_progress_texture(image_texture)
44+
$vbox/health_bar.set_tint_progress(Color.RED)
45+
set_name("healthbar_" + str(player_id))
46+
47+
func _physics_process(delta):
48+
pass
49+
if str(get_parent().name) == str($"/root/main/net".multiplayer.get_unique_id()):
50+
set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
51+
$vbox.set_anchors_and_offsets_preset(Control.PRESET_CENTER_BOTTOM)
52+
53+
else: #if not network master (if otherplayer)
54+
var healthbar_max_distance = 50
55+
56+
var test_id = str(multiplayer.get_unique_id())
57+
var test = get_node("/root/main/players/" + str(test_id) + "/" + str(test_id))
58+
59+
var distance = player.transform.origin.distance_to(test.transform.origin)
60+
# #TODO offset based on distance??????????????????????????????????????????????????????????????
61+
if distance < healthbar_max_distance:
62+
var camera: Camera3D = test.get_node("SpringArm3D/Camera3D")
63+
var healthbar_max_offset_y = 180
64+
var healthbar_offset_y=healthbar_max_offset_y-distance
65+
## var nametag_healthbar_offset = 5
66+
var offset = Vector2(size.x/2*get_scale().x/2, healthbar_offset_y) #TODO offset based on distance
67+
## var offset_nametag = Vector2(lbl_nametag.get_size().x * lbl_nametag.get_scale().x/2, healthbar_offset_y + get_node("healthbar_" + get_name()).get_size().y*get_node("healthbar_" + get_name()).get_scale().y/2 + nametag_healthbar_offset) #TODO offset based on distance
68+
# # if( get_node("../../ui/healthbar_" + get_name()).get_position().x in (camera.unproject_position(get_translation()) - offset).x):
69+
var fovx = get_node("../SpringArm3D/Camera3D").position.x
70+
var fovy = get_node("../SpringArm3D/Camera3D").position.y
71+
var hbx = (get_node("../SpringArm3D/Camera3D").unproject_position(test.position) - offset).x
72+
var hby = (get_node("../SpringArm3D/Camera3D").unproject_position(test.position) - offset).y
73+
if(hby > 0 and hby > fovy) or (hbx > 0 and hbx > fovx) :
74+
## # healthbar.set_scale(Vector2(0.5, 0.5)) #scale 50%
75+
if distance < 40:
76+
var zwischenresultat = float(1) / healthbar_max_distance
77+
var distanceinprozent = distance * zwischenresultat #dreisatz 1=100%
78+
set_scale(Vector2(1,1) - Vector2(distanceinprozent, distanceinprozent)) # Set scale based on distance
79+
show()
80+
# lbl_nametag.text="<" + str(player.charname) + "@" + str(player.username) + ">"
81+
$vbox/name_tag.text="<" + str(player.player_name) + ">"
82+
$vbox/name_tag.show()
83+
# set_position(camera.unproject_position(player.position) - offset)
84+
set_position(camera.unproject_position(player.position))
85+
else:
86+
hide()
87+
else:
88+
hide()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[gd_scene load_steps=2 format=3 uid="uid://dum3bn17wia6p"]
2+
3+
[ext_resource type="Script" path="res://assets/health_bar/health_bar.gd" id="1_a6ycr"]
4+
5+
[node name="health_Bar" type="Control"]
6+
layout_mode = 3
7+
anchors_preset = 0
8+
script = ExtResource("1_a6ycr")
9+
10+
[node name="vbox" type="VBoxContainer" parent="."]
11+
layout_mode = 1
12+
offset_right = 149.0
13+
offset_bottom = 40.0
14+
15+
[node name="name_tag" type="Label" parent="vbox"]
16+
visible = false
17+
layout_mode = 2
18+
text = "< character@user >"
19+
20+
[node name="health_bar" type="TextureProgressBar" parent="vbox"]
21+
layout_mode = 2
22+
size_flags_vertical = 8

client/assets/net/server_to_client.gd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ func send_output_to_client_unreliable(states_udp_json_string: String):
6969
player.position = Vector3(str_to_var("Vector3" + states_udp["player"][id]["position"]))
7070
if states_udp["player"][id].has("camera_arm_rotation"):
7171
player.camera_arm.rotation = Vector3(str_to_var("Vector3" + states_udp["player"][id]["camera_arm_rotation"]))
72+
if states_udp["player"][id].has("health"):
73+
player.health = int(states_udp["player"][id]["health"])
74+
if states_udp["player"][id].has("mana"):
75+
player.mana = int(states_udp["player"][id]["mana"])
7276
if states_udp.has("moving_cube"):
7377
for id in states_udp["moving_cube"]:
7478
if get_node("/root/main/maps/").get_child_count() > 0:

client/assets/player/player.gd

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ var mouse_sensitivity: float = 4.0
1919
@onready var camera_arm = $"SpringArm3D"
2020
@onready var camera = camera_arm.get_node("Camera3D")
2121

22+
var health: int
23+
var mana: int
24+
25+
var health_bar: Control
26+
2227
#@onready var b_res := preload("res://../assets/bullet/bullet.tscn")
2328

2429
func _ready():
@@ -27,14 +32,25 @@ func _ready():
2732
var material = StandardMaterial3D.new()
2833
material.albedo_color = color
2934
mesh_instance.set_surface_override_material(0, material)
35+
36+
#add healthbar
37+
var max_health=100
38+
var health=max_health
39+
health_bar = preload("res://assets/health_bar/health_bar.tscn").instantiate()
40+
health_bar.get_node("vbox/health_bar").max_value=max_health
41+
health_bar.get_node("vbox/health_bar").set_value(max_health)
42+
health_bar.player_id=self.get_name()
43+
add_child(health_bar)
3044

3145
func _physics_process(delta):
32-
33-
if str(name) == str($"/root/main/net".multiplayer.get_unique_id()) : #and int(str(name)) == $"/root/main/net".peer_id
46+
health_bar.get_node("vbox/health_bar").set_value(health)
47+
if str(name) == str($"/root/main/net".multiplayer.get_unique_id()): #and int(str(name)) == $"/root/main/net".peer_id
3448
show_debug_panel()
3549
$inputs.send_inputs()
3650
camera.current = true
3751

52+
53+
3854
#client_prediction (simulate physics on client too, to compensate for lag)
3955
if client_prediction == true:
4056
# Add the gravity.

server/assets/player/player.gd

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ var old_camera_arm_rotation
2222
var old_camera_arm_scale
2323

2424
var health: int = 100
25+
var old_health: int
2526
var mana: int = 100
27+
var old_mana: int
2628

2729
@onready var camera_arm = $"SpringArm3D"
2830
@onready var camera = camera_arm.get_node("Camera3D")
@@ -35,6 +37,7 @@ func _ready():
3537
mesh_instance.set_surface_override_material(0, material)
3638

3739
func damage(damage: int):
40+
3841
health -= damage
3942
print(str(name) + ": health " + str(health))
4043
#respawn if health is zero
@@ -77,6 +80,8 @@ func _physics_process(delta):
7780
print(name + ": shoot")
7881
var from_player = int(str(name))
7982
$"/root/main/net".spawn_bullet(from_player)
83+
mana -= 10
84+
print("mana: " + str(mana))
8085
# $"/root/main/net".spawn_bullet_on_clients(from_player)
8186

8287
#Handle zoom
@@ -114,6 +119,12 @@ func _physics_process(delta):
114119
if camera_arm.rotation != old_camera_arm_rotation: # only add if changed
115120
old_camera_arm_rotation = camera_arm.rotation
116121
player_state_udp["camera_arm_rotation"] = camera_arm.rotation
122+
if health != old_health: # only add if changed
123+
old_health=health
124+
player_state_udp["health"] = health
125+
if mana != old_mana: # only add if changed
126+
old_mana=mana
127+
player_state_udp["mana"] = mana
117128
if !player_state_udp.is_empty(): # only add if not empty
118129
#if states_udp doesnt have player category add it to states_udp
119130
if !get_node("/root/main/net").states_udp.has("player"):

0 commit comments

Comments
 (0)