You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.6 KiB
GDScript
86 lines
2.6 KiB
GDScript
|
2 years ago
|
extends Control
|
||
|
|
|
||
|
|
@onready var headbar_scene = preload("res://scene/ui/item/headbar.tscn")
|
||
|
2 years ago
|
@onready var camera: CameraManager = Global.camera_mgr
|
||
|
2 years ago
|
|
||
|
|
class HeadbarMeta:
|
||
|
|
var pos:Vector3
|
||
|
|
var headbar:Headbar
|
||
|
|
|
||
|
|
var headbar_map = {}
|
||
|
|
|
||
|
|
func _ready():
|
||
|
|
SignalManager.character_create.connect(on_character_create)
|
||
|
2 years ago
|
SignalManager.character_ui_pos_changed.connect(on_character_ui_pos_changed)
|
||
|
2 years ago
|
SignalManager.character_destroy.connect(on_character_destroy)
|
||
|
|
SignalManager.character_status_changed.connect(on_character_status_changed)
|
||
|
2 years ago
|
SignalManager.character_hit_text.connect(on_character_hit_text)
|
||
|
|
SignalManager.character_hit_damage.connect(on_character_hit_damage)
|
||
|
2 years ago
|
SignalManager.character_die.connect(on_character_die)
|
||
|
2 years ago
|
|
||
|
2 years ago
|
|
||
|
|
func _process(delta):
|
||
|
|
var camera_pos = camera.position
|
||
|
|
for k in headbar_map:
|
||
|
|
var headbar_meta = headbar_map[k] as HeadbarMeta
|
||
|
|
headbar_meta.headbar.position = camera.unproject_position(headbar_meta.pos)
|
||
|
|
|
||
|
|
func on_character_create(id:int,team:Enum.ETeam,pos:Vector3):
|
||
|
2 years ago
|
#if team == Enum.ETeam.Player:
|
||
|
|
# return
|
||
|
2 years ago
|
return
|
||
|
2 years ago
|
var new_headbar_meta = HeadbarMeta.new()
|
||
|
|
new_headbar_meta.pos = pos
|
||
|
|
var new_headbar = headbar_scene.instantiate()
|
||
|
|
add_child(new_headbar)
|
||
|
|
new_headbar_meta.headbar = new_headbar
|
||
|
2 years ago
|
on_character_ui_pos_changed(id,pos)
|
||
|
2 years ago
|
headbar_map[id] = new_headbar_meta
|
||
|
|
|
||
|
2 years ago
|
func on_character_ui_pos_changed(id:int,pos:Vector3):
|
||
|
2 years ago
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
|
headbar_meta.pos = pos
|
||
|
|
headbar.position = camera.unproject_position(pos)
|
||
|
|
|
||
|
|
func on_character_destroy(id:int):
|
||
|
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
|
headbar.queue_free()
|
||
|
|
headbar_map.erase(id)
|
||
|
|
|
||
|
|
func on_character_status_changed(id:int,status_name:String,value):
|
||
|
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
|
var func_name = "on_%s_changed" % status_name
|
||
|
|
if headbar.has_method(func_name):
|
||
|
|
headbar.call(func_name,value)
|
||
|
|
|
||
|
2 years ago
|
func on_character_hit_text(id:int,value:String):
|
||
|
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
|
headbar.on_hit_text(value)
|
||
|
|
|
||
|
|
func on_character_hit_damage(id:int,value:float):
|
||
|
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
2 years ago
|
headbar.on_hit_damage(value)
|
||
|
2 years ago
|
|
||
|
|
func on_character_die(id:int):
|
||
|
|
if not id in headbar_map:
|
||
|
|
return
|
||
|
|
var headbar_meta = headbar_map[id]
|
||
|
|
var headbar = headbar_meta.headbar as Headbar
|
||
|
|
headbar.queue_free()
|
||
|
|
headbar_map.erase(id)
|