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) |