|  |  |  | @tool | 
					
						
							|  |  |  | extends AnimationSelectCfg | 
					
						
							|  |  |  | class_name SkillCfg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @export var name: String | 
					
						
							|  |  |  | @export var skill_animation: Animation | 
					
						
							|  |  |  | @export var range: float | 
					
						
							|  |  |  | @export var free_lock: bool | 
					
						
							|  |  |  | @export var ignore_push: bool | 
					
						
							|  |  |  | @export var attack1: AttackCfg | 
					
						
							|  |  |  | @export var attack1_box: AttackBoxCfg | 
					
						
							|  |  |  | @export var attack1_with_pause_frame: bool | 
					
						
							|  |  |  | @export var attack1_with_stop: bool | 
					
						
							|  |  |  | @export var attack2: AttackCfg | 
					
						
							|  |  |  | @export var attack2_box: AttackBoxCfg | 
					
						
							|  |  |  | @export var attack2_with_pause_frame: bool | 
					
						
							|  |  |  | @export var attack2_with_stop: bool | 
					
						
							|  |  |  | @export var sub_character: CharacterCfg | 
					
						
							|  |  |  | @export var stance_from: Enum.EStance = Enum.EStance.GroundAny | 
					
						
							|  |  |  | @export var stance_to: Enum.EStance | 
					
						
							|  |  |  | @export var break_level: Enum.EBreakLevel = Enum.EBreakLevel.Break | 
					
						
							|  |  |  | @export var is_charging: bool | 
					
						
							|  |  |  | @export var mp_cost: int | 
					
						
							|  |  |  | @export var mp_sub_cost: bool | 
					
						
							|  |  |  | @export var warn_type: Enum.ESkillWarnType = Enum.ESkillWarnType.None | 
					
						
							|  |  |  | @export var with_stop: bool = false | 
					
						
							|  |  |  | @export var is_lock_x: bool = true | 
					
						
							|  |  |  | @export var is_lock_x_move: bool = false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @export var refresh_animation: bool: | 
					
						
							|  |  |  | 	get: return false | 
					
						
							|  |  |  | 	set(value): if Engine.is_editor_hint(): check_animation() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var attack_particle: Dictionary = {} | 
					
						
							|  |  |  | var owner: CharacterCfg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func check_animation() -> bool: | 
					
						
							|  |  |  | 	var res_name: String = get_res_name() | 
					
						
							|  |  |  | 	var path: String     = "res://resource/skill_animation/%s.tres" % res_name | 
					
						
							|  |  |  | 	if sprite_frames == null: | 
					
						
							|  |  |  | 		print("未设置技能动画资源") | 
					
						
							|  |  |  | 		return false | 
					
						
							|  |  |  | 	if animation_name == "": | 
					
						
							|  |  |  | 		print("未设置技能动画名") | 
					
						
							|  |  |  | 		return false | 
					
						
							|  |  |  | 	if !sprite_frames.has_animation(animation_name): | 
					
						
							|  |  |  | 		print("技能动画名不存在") | 
					
						
							|  |  |  | 		return false | 
					
						
							|  |  |  | 	var animation: Animation = ResourceLoader.load(path) as Animation | 
					
						
							|  |  |  | 	if not animation: | 
					
						
							|  |  |  | 		animation = Animation.new() | 
					
						
							|  |  |  | 		animation.resource_name = res_name | 
					
						
							|  |  |  | 	Util.refresh_animation_by_sprite_frames(path, sprite_frames, animation_name, animation) | 
					
						
							|  |  |  | 	Util.refresh_animation_lib() | 
					
						
							|  |  |  | 	skill_animation = load(path) | 
					
						
							|  |  |  | 	return true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_attack1()->AttackCfg: return attack1 if attack1 else ResourceManager.cfg_attack_normal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_attack1_box()->AttackBoxCfg: return attack1_box if attack1_box else ResourceManager.cfg_attack_box_normal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_attack2()->AttackCfg: return attack2 if attack2 else ResourceManager.cfg_attack_normal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_attack2_box()->AttackBoxCfg: return attack2_box if attack2_box else ResourceManager.cfg_attack_box_normal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_attack_particle(index: int)->Resource: | 
					
						
							|  |  |  | 	var res_name: String   = get_res_name() | 
					
						
							|  |  |  | 	var path_index: String = "res://scene/effect/particle/%s_%d.tscn" % [res_name, index] | 
					
						
							|  |  |  | 	if ResourceLoader.exists(path_index): | 
					
						
							|  |  |  | 		attack_particle[index] = load(path_index) | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		var path_default: String = "res://scene/effect/particle/%s.tscn" % res_name | 
					
						
							|  |  |  | 		if ResourceLoader.exists(path_default): | 
					
						
							|  |  |  | 			attack_particle[index] = load(path_default) | 
					
						
							|  |  |  | 	if index in attack_particle: | 
					
						
							|  |  |  | 		return attack_particle[index] | 
					
						
							|  |  |  | 	return null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_owner() -> CharacterCfg: | 
					
						
							|  |  |  | 	if not owner: | 
					
						
							|  |  |  | 		var owner_name: String = get_res_name().split("_")[0] | 
					
						
							|  |  |  | 		var path: String       = "res://config/character/%s.tres" % owner_name | 
					
						
							|  |  |  | 		if ResourceLoader.exists(path): | 
					
						
							|  |  |  | 			owner = load(path) as CharacterCfg | 
					
						
							|  |  |  | 	return owner |