|
| 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() |
0 commit comments