|  |  |  | extends Control | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @onready var headbar_scene: PackedScene = preload("res://scene/ui/item/headbar.tscn") | 
					
						
							|  |  |  | @onready var camera: CameraManager = Global.camera_mgr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HeadbarMeta: | 
					
						
							|  |  |  | 	var pos: Vector3 | 
					
						
							|  |  |  | 	var headbar: Headbar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var headbar_map: Dictionary = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _ready(): | 
					
						
							|  |  |  | 	SignalManager.character_create.connect(on_character_create) | 
					
						
							|  |  |  | 	SignalManager.character_ui_pos_changed.connect(on_character_ui_pos_changed) | 
					
						
							|  |  |  | 	SignalManager.character_destroy.connect(on_character_destroy) | 
					
						
							|  |  |  | 	SignalManager.character_status_changed.connect(on_character_status_changed) | 
					
						
							|  |  |  | 	SignalManager.character_hit_text.connect(on_character_hit_text) | 
					
						
							|  |  |  | 	SignalManager.character_hit_damage.connect(on_character_hit_damage) | 
					
						
							|  |  |  | 	SignalManager.character_die.connect(on_character_die) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _process(delta): | 
					
						
							|  |  |  | 	for k in headbar_map: | 
					
						
							|  |  |  | 		var headbar_meta: HeadbarMeta = headbar_map[k] as HeadbarMeta | 
					
						
							|  |  |  | 		headbar_meta.headbar.position = camera.get_screen_pos(headbar_meta.pos) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_create(id: int, type: int, pos: Vector3) -> void: | 
					
						
							|  |  |  | 	if type != Enum.ECharacterType.Monster: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var new_headbar_meta     = HeadbarMeta.new() | 
					
						
							|  |  |  | 	var new_headbar: Headbar = headbar_scene.instantiate() as Headbar | 
					
						
							|  |  |  | 	new_headbar_meta.pos = pos | 
					
						
							|  |  |  | 	new_headbar_meta.headbar = new_headbar | 
					
						
							|  |  |  | 	new_headbar.set_debug_info_show(get_tree().debug_collisions_hint) | 
					
						
							|  |  |  | 	add_child(new_headbar) | 
					
						
							|  |  |  | 	on_character_ui_pos_changed(id, pos) | 
					
						
							|  |  |  | 	headbar_map[id] = new_headbar_meta | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_ui_pos_changed(id: int, pos: Vector3) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta     = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	headbar_meta.pos = pos | 
					
						
							|  |  |  | 	headbar.position = camera.get_screen_pos(pos) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_destroy(id: int) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta     = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	headbar.queue_free() | 
					
						
							|  |  |  | 	headbar_map.erase(id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_status_changed(id: int, status_name: String, value) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta      = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar  = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	var func_name: String = "on_%s_changed" % status_name | 
					
						
							|  |  |  | 	if headbar.has_method(func_name): | 
					
						
							|  |  |  | 		headbar.call(func_name, value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_hit_text(id: int, value: String) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta     = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	headbar.on_hit_text(value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_hit_damage(id: int, value: float) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta     = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	headbar.on_hit_damage(value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_character_die(id: int) -> void: | 
					
						
							|  |  |  | 	if not id in headbar_map: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	var headbar_meta     = headbar_map[id] | 
					
						
							|  |  |  | 	var headbar: Headbar = headbar_meta.headbar as Headbar | 
					
						
							|  |  |  | 	headbar.queue_free() | 
					
						
							|  |  |  | 	headbar_map.erase(id) |